2012-04-24 13 views
5

Primero estoy usando EF 4.1 con la base de datos.¿Por qué EF DataBase First no usa getdate()?

tabla Ejemplo:

CREATE TABLE dbo.Product(
    [ID] [int] IDENTITY(1,1) not null, 
    Title nvarchar(200) not null, 
    CreateDate datetime not null default(getdate()), 
) 

Al agregar una nueva fila, me sale una excepción sobre DateTime tipo de desbordamiento.

La configuración de base de datos getdate() no es válida.

Debo establecer la propiedad storeGeneatePattern del campo createdate en Computed.

¿Hay alguna manera de dejar que EF genere automáticamente la columna DateTime sin configurar manualmente?

Respuesta

5

Sin EF nunca utilizará su base de datos predeterminada. La razón es que su entidad tiene una propiedad que no admite nulos DateTime. Esta propiedad tiene asignado por defecto el valor predeterminado en .NET que es 1.1.0001. EF no sabe si asignó ese valor o si es un valor predeterminado, por lo que siempre pasa explícitamente este valor a la base de datos. Lo mismo sucede si utiliza un tipo que admite nulos, pero en este caso EF pasará explícitamente nulo. En ambos casos, no se aplicará el valor predeterminado de la base de datos porque ese valor se aplica solo cuando el valor de la aplicación no se pasa explícitamente en un comando de inserción: EF explícitamente pasa todos los valores de la entidad.

+0

Motivo suficiente para no usar EF en ninguna aplicación seria para mí. – xr280xr

1

Puede hacerlo en su constructor de la clase Product entidad,

public class Product{ 
    public Product(){ 
    CreateDate =DateTime.Now; 
    } 
} 
+1

Lo sé, pero cuando hay múltiples campos similares, la carga de trabajo es muy grande. ¿Puede EF simplemente usar "getdate()" de la configuración de la base de datos sin establecer manualmente? –

Cuestiones relacionadas