À l'aide d'une Vue SQL à partir d'un Entity Framework Code First version 5
Je suis en train d'établir un contact vous connecter à un site web à l'aide de VS 2010, MVC3 et EF 5 - les entités sont créées à l'aide de code de la première. Les données sont stockées dans un Serveur SQL 2008 R2 ensemble de bases de données. Je veux afficher un résumé du contact journal et ont créé une vue.
CREATE VIEW dbo.ContactLogSummaries
AS
SELECT
CLE.ContactLogEntryID,
CLE.CaseID,
'Test' AS ContactName,
EU.UserName As OfficeUser,
CLE.DateAndTimeOfContact,
CLC.Category,
CLE.ContactDetails
FROM
ContactLogEntries AS CLE
JOIN
ContactLogCategories AS CLC
ON CLE.ContactLogCategoryID = CLC.ContactLogCategoryID
JOIN
Control.dbo.EndUsers AS EU
ON CLE.UserID = EU.EnduserID
Il y a deux entités de Contact dans la base de données du Journal (ContactLogEntries
et ContactLogCategories
) et une première base de données d'entité Control.dbo.EndUsers
dans une autre base de données. Le contact de journal peut contenir un grand nombre d'enregistrements. Je veux être en mesure d'afficher uniquement les enregistrements pour un cas spécifique.
Ma question est en deux parties:
- Puis-je utiliser la vue SQL directement pour afficher un résumé sur une page web (peut-être par la lecture dans une classe)
- Puis-je créer un premier code objet équivalent à la vue SQL.
OriginalL'auteur Peter Smith | 2013-09-03
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement la carte de l'Entité directement à la vue en utilisant TableAttribute (données annoations), ou ToTable dans votre Couramment Mappages...
Par exemple à l'aide de données annotions:
OriginalL'auteur Brandon
Trouvé une solution simple à la question 1:
Il fait tout ce qu'il faut, même si je suis d'intérêt dans une réponse à la question 2, j'ai une solution qui fonctionne.
Pas d'Injection SQL ici. Un - c'est un exemple; deux, CaseID n'est pas retourné à partir du site web. Puis-je avoir mon plus un retour s'il vous plaît?
Pierre - je peux comprendre que ce code est illustratif dans la nature, mais, il n'y a aucun moyen pour qu'un lecteur puisse savoir si ou de ne pas CaseID vient de quelque chose qui est affiché à un formulaire (par exemple, les modifier, ou vient à partir d'une chaîne de requête). Je vais mettre votre plus en arrière si vous paramétrer la chaîne. Il fera de votre code un peu plus de temps, mais il sera un très bon exemple pour la communauté. Il permettra également de SQL Server pour créer un plan d'exécution de cette requête pour réutilisation postérieure.
OK, enfin mis à l'ajout d'un paramètre à la requête. (Puis-je avoir mon plus retour s'il vous plaît?)
Vous devez ajouter les paramètres de la façon Entity Framework n':
@p0
,@p1
etc. Vous pouvez utiliser leparams
surcharge:dbContext.Database.SqlQuery<ContactLogSummary>("SELECT * FROM dbo.ContactLogSummaries WHERE MaternalCaseID = @p0 AND TestID = @p1 ORDER BY ContactLogEntryID DESC", caseId, testId)
OriginalL'auteur Peter Smith