2015-12-24 50 views
0

我已經定義了這個好表。如何讓EF瞭解某些列不可爲空?

create table WeirdDonkey (
    Tails int not null, 
    Heads int default 7 
) 

當我在它上面運行EF時,它會創建兩個字段,如下所示。

public int Tails { get; set; } 
public Nullable<int> Heads { get; set; } 

現在,我明白爲什麼它認爲頭數是可以爲空的,但它沒有任何意義。一頭驢不能有頭null頭。如果沒有其他規定,它可以有7個。 (嗯,這在動物學上沒有任何意義,但假設我們在一個遵循我的SQL魔法規則的不同星球上)。

我該如何讓EF瞭解默認值是7並且不會出現空頭驢?

+1

給予的列的默認值不從更新爲空值,阻止它。 –

+1

EF正確,請參閱[demo](https://data.stackexchange.com/stackoverflow/query/415508)。你可以很容易地插入NULL。 – lad2025

回答

4

EF是對的。 Heads可能有空值。如果插入一行後發生了什麼情況,您決定將Heads的值更新爲null。數據庫會不會接受它?是的,它會。

如果你不想空,你必須明確地將其定義爲這樣的:

create table WeirdDonkey (
    Tails int not null, 
    Heads int not null default 7 
) 
+0

哦,太蠢了......我完全錯過了。你會說更聰明的去*不是空*或添加*約束*?前者似乎更容易,所以我更喜歡這一點。但「更容易」通常會變成「不太長期」... –

+0

「不空」是一種約束類型。所以是的,只需使用'not null'。沒有必要使用更冗長的語法。 – sstan