20

複合キーを持つモデルがあります-行がキーです:

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

DbEntityValidationException以下のコードを実行すると、メッセージ付きの例外がスローされますThe Date field is required.::

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

m_Entities通常DbContext、Itemsがとして定義されている子孫です) (として宣言されている)ことができるのにDbSet<Item>、なぜ必要なのですか?そして、どのようにの有効な値になることを許可するのですか?DatenullDateTime?nullDate

4

3 に答える 3

11

ラファエルからの回答は私を別の検索に導きます。それが不可能な理由は次のとおりです(Cobsyからの回答):

複合主キーのnull許容列の何が問題になっていますか?

要するに: NULL == NULL-> false

Wierd。私にとっての解決策は、Id列をモデルに追加することです。

ところで:MySQLは私に主キーを定義しないことを許可します、そして私はそのようなスキーマを持つことを許可されます-EFはキーを定義しないことについて不平を言います:-(。

于 2012-06-04T21:36:47.487 に答える
3

SQL Server、またはOracleでは、主キーのどの部分でも使用できません。

ただし、これらのデータに一意の制約を設定できます。

つまり、あなたは一度を持つことができます

UserId = 2, Date = null

それで

UserId = 2, Date = <NOT NULL>

Code Firstを使用して直接一意の制約を作成することはできませんが、SMOを確認してください。

于 2012-06-04T21:15:53.260 に答える
0

それは不可能。すべてのRDBMS要件は、その主キーがnull許容であってはならないということです。

于 2012-06-04T20:52:40.277 に答える