2012-05-23 13 views
5

me gustaría tener una columna CreatedDate en mi mesa Accounts se definen a continuación:Cómo usar la base de datos predeterminada para la columna CreatedDate en el código EF-primero 4.3?

CreatedDate DATETIME NOT NULL DEFAULT GETUTCDATE() 

Esto asociará a una propiedad CreatedDate en la clase:

public class Account 
{ 
    public DateTime? CreatedDate { get; private set; } 
    // ... other properties ... 
} 

Al crear una nueva cuenta , Me gustaría dejar CreatedDate establecido en NULL, y dejar que la base de datos lo complete. Al cargar una cuenta existente desde el DB, me gustaría que EF recupere el CreatedDate generado por la base de datos.

Estoy utilizando EF 4.3 first-code con migraciones explícitas. Cuando EF genera una migración de la tabla de cuentas, he modificado de la siguiente manera:

CreatedDate = c.DateTime(nullable: false, defaultValueSql: "GETUTCDATE()"), 

Por desgracia, cuando intento trazar la tabla usando EF 4.3, EF intenta insertar el valor NULL en la columna de la CreatedDate.

Intenté establecer DatabaseGeneratedOption.Identity para la propiedad, as suggested by Ladislav Mrnka. Sin embargo, esto elimina la opción de identidad de la propiedad de la clave principal. Intenté usar DatabaseGeneratedOption.Computed en su lugar, pero continúa intentando insertar un NULL. Revertí todas las migraciones y las modifiqué; el problema aún ocurre.

Esto es lo que estoy haciendo en OnModelCreating:

modelBuilder.Entity<Account>().Property(a => a.CreatedDate) 
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Computed); 

¿Alguien tiene alguna sugerencia?

Gracias por su ayuda,
Richard

Respuesta

4

Realizar la fecha no anulable en su entidad o anulable en su base de datos. El valor predeterminado de la base de datos se usa solo si la instrucción de inserción no envía un valor explícito. En el caso de EF esto ocurre solo si marca su CreatedDate con DatabaseGeneratedOption.Identity. Si elimina la identidad predeterminada de su clave principal, hágalo manualmente a través de anotaciones de datos o API fluida.

+0

Gracias Ladislav! Funciona. Marqué CreatedDate y mi columna de ID con DatabaseGeneratedOption.Identity. Lo dejé como anulable en mi entidad y no admite nulos en la base de datos, pero con la opción Identidad, ya no inserta el NULL explícito. –

Cuestiones relacionadas