dieron una mesa "usuario" y una mesa de "Login" en MS SQL 2008:¿Cómo agrego una columna calculada a mi modelo 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,
)
¿Cómo ajusto mi User_User entidad modelo de marco de objeto para incluir una columna "UserLastLogin" que devuelve un MAX (LoginDate)?
sé que puedo crear un modelo EF4 alrededor de 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]
Pero hay una manera que sólo puede modificar el modelo User_User para incluir el columnn calculada?
EDIT: Estoy buscando una manera de buscar un usuario o una lista <usuario> incluyendo la fecha Max (Util.LastLogin) en una sola consulta db.
Gracias por la respuesta detallada! Un problema que veo es que llevará una consulta SQL para establecer el LastLoginDate para cada usuario. p.ej. Si tengo una lista de 50 usuarios, eso significa 1 consulta para completar la lista y 50 consultas adicionales para completar el LastLoginDate para cada usuario. ¿O estoy equivocado sobre el evento ObjectMaterialized? –
uhleeka
Eso es correcto, el evento se desencadena para cada objeto de usuario en la lista.Si esto no es deseable, la otra opción sería cargar ansiosamente la propiedad de navegación Util y luego hacer un Max() en ella en el lado del cliente. –
Sí, miré ansiosamente cargar un poco ... ¿no habría una carga ansiosa de que el Util devolviera todas las filas de Utilidades asociadas con el Usuario? Entonces, esencialmente, un lado del cliente Max() estaría tirando todo menos la primera fila. – uhleeka