Étant donné un « utilisateur » table et une table « Connexion » dans MS SQL 2008:Comment ajouter une colonne calculée à mon modèle EF4?
CREATE TABLE [dbo].[User_User](
[UserID] [int] IDENTITY(1000,1) NOT NULL,
[UserName] [varchar](63) NOT NULL,
[UserPassword] [varchar](63) NOT NULL
)
CREATE TABLE [dbo].[Util_Login](
[LoginID] [int] IDENTITY(1000,1) NOT NULL,
[User_UserID] [int] NOT NULL, -- FK REFERENCES [dbo].[User_User] ([UserID])
[LoginDate] [datetime] NOT NULL,
)
Comment puis-je régler mon inclure une colonne « UserLastLogin » User_User entité objet modèle-cadre qui renvoie un MAX (LoginDate)?
Je sais que je peux créer un modèle EF4 autour d'une vue SQL:
CREATE VIEW [v_User_User]
AS
SELECT
[User_User].*,
(
SELECT MAX(LoginDate)
FROM [Util_Login]
WHERE User_UserID = UserID
) AS UserLastLogin
FROM [User_User]
Mais est-il possible que je peux simplement modifier le modèle de User_User pour inclure la columnn calculée?
EDIT: Je suis à la recherche d'un moyen de chercher un utilisateur ou une liste <utilisateur> y compris la date Max (Util.LastLogin) dans une seule requête db.
Merci pour la réponse verbeuse! Un problème que je vois est qu'il faudra une requête sql pour définir le LastLoginDate pour chaque utilisateur. par exemple. Si j'ai une liste de 50 utilisateurs, cela signifie une requête pour remplir la liste et 50 requêtes supplémentaires pour remplir le LastLoginDate pour chaque utilisateur. Ou est-ce que je me trompe à propos de l'événement ObjectMaterialized? –
uhleeka
C'est exact, l'événement est déclenché pour chaque objet utilisateur dans la liste.Si cela n'est pas souhaitable, l'autre option consisterait à charger avec impatience la propriété de navigation Util, puis à faire un Max() sur le côté client. –
Ouais, j'ai regardé impatiemment le chargement un peu ... une charge ardente de l'Util ne retournerait-elle pas toutes les lignes Util associées à l'Utilisateur? Donc, essentiellement, un client côté Max() jetterait tout sauf la première rangée. – uhleeka