2012-06-04 17 views
9

私は複合キーでモデルを持っている - 行がキーである:The Date field is required.Entity Framework:コンポジットキーのフィールドをnullにすることはできませんか?

var it = new Item { Date = null, UserId = 2 }; 
m_Entities.Items.Add(it); 
m_Entities.SaveChanges(); // throws exception 

m_Entitiesが通常であるDbContext子孫は、メッセージと例外DbEntityValidationExceptionをスローの下

public class Item 
{ 
    [Key, Column(Order = 0)] 
    public int UserId { get; set; } 
    [Key, Column(Order = 1)] 
    public DateTime? Date { get; set; } 
} 

は、コードを実行します項目がDbSet<Item>と定義されています) nullDateTime?と宣言されています)の場合には、Dateが必要なのはなぜですか?また、nullDateの有効な値にする方法を教えてください。

答えて

8

Raphaelからの回答は別の検索につながります。 >偽

奇妙 - NULL == NULL

What's wrong with nullable columns in composite primary keys?

要するに:それは(Cobsyからの回答)は不可能である理由はここにあります。私の解決策は、Id列をモデルに追加することです。ところで

:MySQLはその後、私は、このようなスキーマを持つことが許されています、主キーを定義しないように私を許可する - EFはおよそキー:-(を定義していない文句を言い

1

これはできません。すべてのRDBMSの要件は、その主キーはNULL可能でなければならないということです。

+2

まあは、主キーは{ユーザーID、日付}です。それはどこの日付がnullableであることが保証されているのですか?そうでないのはなぜですか?あなたのステートメントに同意しないでください。 – Zoka

2

Sql ServerまたはOracleでは、主キーのどの部分にも対応できません。

しかし、これらのデータには一意の制約を設定できます。あなたは1時間

UserId = 2, Date = null 

を持つことができることを意味

その後

UserId = 2, Date = <NOT NULL> 

あなたは、コードファーストとの直接のユニークな制約を作成するのではなく、SMOを見ることができません。

関連する問題