2010-11-13 11 views
7

podczas dodawania nowego rekordu jak tenJak wstawić wartości domyślne DB w EF?

ContentContacts c2 = new ContentContacts(); 

c2.updated_user = c2.created_user = loggedUserId; 
c2.created_date = c2.updated_date = DateTime.UtcNow; 

db.ContentContacts.AddObject(c2); 

Dostaję

Cannot insert the value NULL into column 'main_email_support', table 'SQL2008R2.dbo.ContentContacts'; column does not allow nulls. INSERT fails. The statement has been terminated.

ale wartość domyślna w bazie jest pusty ciąg znaków takich jak:

alt text

dlaczego otrzymuję taki błąd? EF nie powinien powiedzieć coś takiego:

"ohh, it's a null value, so let's add the column default value instead"

+0

Czy otrzymujesz błąd w linii AddObject lub gdy wywołujesz zapisanie zmian? –

+0

błąd zostanie wywołany, gdy zadzwonię do 'SaveChanges' – balexandre

Odpowiedz

6

Zrobiłem mały test, utworzyłem tabelę z kolumną, która miała domyślną wartość, ale nie pozwalała na zerowanie.

Wtedy ten komunikat SQL:

INSERT INTO [Test].[dbo].[Table_1] 
     ([TestText]) 
VALUES 
     (null) 

daje ten błąd:

Msg 515, Level 16, State 2, Line 1
Cannot insert the value NULL into column 'TestText', table 'Test.dbo.Table_1'; column does not allow nulls. INSERT fails.

Problem polega na tym, że wkładka określa wszystkie kolumny, także te z wartościami domyślnymi. Wstawianie próbuje zaktualizować kolumny wartościami pustymi.

Masz 2 opcje:

  • zaktualizować tabelę poprzez widzenia, który nie zawiera kolumn domyślnie
  • ustawić wartości domyślne w kod C#
  • wartość

domyślny jest logika biznesowa, więc istnieje przypadek, aby był ustawiony w warstwie biznesowej aplikacji.

Powiązane problemy