2012-04-24 10 views
5

Najpierw używam EF 4.1 z bazą danych.Dlaczego EF DataBase Najpierw nie używamy getdate()?

Przykład tabeli:

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

Podczas dodawania nowego rzędu, pojawia się wyjątek odnośnie typu DateTime przepełnienia.

Ustawienia bazy danych getdate() są nieprawidłowe.

Muszę ustawić wartość storeGeneatePattern pola createdate na Computed.

Czy jest jakiś sposób, aby EF automatycznie wygenerował kolumnę DateTime bez ustawienia ręcznie?

Odpowiedz

5

Nie EF nigdy nie użyje domyślnej bazy danych. Powodem jest to, że twoja jednostka ma właściwość nieululującą DateTime. Ta właściwość ma przypisaną domyślną wartość w .NET, która wynosi 1.1.0001. EF nie wie, czy przypisałeś tę wartość, czy jest to wartość domyślna, więc zawsze jawnie przekazuje tę wartość do bazy danych. To samo dzieje się, jeśli używasz typu zerowego, ale w tym przypadku EF przekaże jawnie wartość null. W obu przypadkach wartość domyślna z bazy danych nie zostanie zastosowana, ponieważ ta wartość jest stosowana tylko wtedy, gdy wartość z aplikacji nie jest jawnie przekazywana w poleceniu wstawiania - EF jawnie przekazuje wszystkie wartości z obiektu.

+0

To wystarczający powód, aby nie używać EF w jakiejkolwiek poważnej aplikacji dla mnie. – xr280xr

1

Można to zrobić w swojej klasie konstruktora Product podmiotu,

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

Wiem o tym, ale gdy istnieje wiele podobnych pól, obciążenie jest bardzo duże. Czy EF może używać "getdate()" ustawienia bazy danych bez ręcznego ustawiania? –

Powiązane problemy