dato un tavolo "utente" e una tabella "Login" in MS SQL 2008:Come si aggiunge una colonna calcolata al modello 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,
)
Come si regola il mio User_User oggetto entità modello quadro per includere una colonna "UserLastLogin" che restituisce un MAX (LoginDate)?
so che posso creare un modello EF4 intorno ad una vista 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]
Ma c'è un modo che posso solo modificare il modello User_User per includere il columnn calcolato?
EDIT: Sto cercando un modo per andare a prendere un utente o un elenco <utente> tra cui la data di Max (Util.LastLogin) in una singola query db.
Grazie per la risposta prolissa! Un problema che vedo è che richiederà una query sql per impostare LastLoginDate per ciascun utente. per esempio. Se ho un elenco di 50 utenti, ciò significa 1 query per popolare l'elenco e 50 query aggiuntive per popolare LastLoginDate per ciascun utente. O mi sbaglio per l'evento ObjectMaterialized? –
uhleeka
Ciò è corretto, l'evento viene attivato per ciascun oggetto utente nell'elenco.Se ciò non è auspicabile, l'altra opzione sarebbe quella di caricare con impazienza la proprietà di navigazione di Util e quindi eseguire un Max() su di esso sul lato client. –
Sì, ho guardato con ansia caricando un po '... non sarebbe un carico impaziente di Util restituire tutte le righe Util associate all'utente? Quindi, essenzialmente, un Max() lato client dovrebbe buttare via tutto tranne la prima riga. – uhleeka