2012-04-24 15 views
5

Sto usando EF 4.1 prima con il database.Perché EF DataBase First non usa getdate()?

tabella Esempio:

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

Quando aggiungere una nuova riga, ottengo un'eccezione circa DateTime tipo di overflow.

Il getdate() delle impostazioni del database non è valido.

Devo impostare la proprietà storeGeneatePattern del campo createdate su Computed.

C'è un modo per consentire all'EF di generare automaticamente la colonna DateTime senza impostare manualmente ??

risposta

5

No EF potrà mai utilizzare il predefinito del database. Il motivo è che la tua entità ha una proprietà non annullabile DateTime. Questa proprietà ha per default il valore predefinito assegnato in .NET, che è 1.1.0001. EF non sa se hai assegnato quel valore o se è un valore di default, quindi passa sempre esplicitamente questo valore al database. Lo stesso accade se si utilizza il tipo nullable, ma in questo caso EF passerà esplicitamente null. In entrambi i casi, il valore predefinito dal database non verrà applicato poiché tale valore viene applicato solo quando il valore dall'applicazione non viene passato esplicitamente in un comando di inserimento - EF trasferisce esplicitamente tutti i valori dall'entità.

+0

Ragione sufficiente per non usare EF in nessuna applicazione seria per me. – xr280xr

1

Si può fare nel vostro costruttore di classe Product entità,

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

Lo so, ma quando ci sono più campi simili il carico di lavoro è molto grande. È possibile utilizzare EF "getdate()" delle impostazioni del database senza impostare manualmente? –

Problemi correlati