1

次のように、クラスにマップされた複合キーがあります。

HasKey(l => new { l.A, l.B });

しかし、ここで A は単位元であるはずです。

Property(l => l.A).HasColumnName("A").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Property(l => l.B).HasColumnName("B");

ただし、A (ID であるため null) と B の値を持つオブジェクトを追加しようとすると、主キー違反が発生します。

これを回避する方法はありますか?

種類は次のとおりです。

public Int64? A{ get; set; } //Identity
public int B { get; set; }

そしてDBの世界から:

A   bigint
B   int
4

2 に答える 2

2

Key フィールドが Integer の場合、Code First のデフォルトは DatabaseGeneratedOption.Identityであり、デフォルトABは Identity です。指定する必要があるのBは Identity ではありません。この構成で試してください:

Property(l => l.A).HasColumnName("A");
Property(l => l.B).HasColumnName("B").HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

ところで、なぜAnullableなのですか?. PK はテーブル内のすべての行の一意の識別子を定義するため、A は ID であるため、テーブルに新しい行を挿入すると、常にその列に値が含まれます。

于 2015-01-22T21:38:03.573 に答える
0

複合主キーでもnull値を持つことは許可されていないようです。hereで述べたように、回避策は、分離された Id 列を主キーとして定義することです。

于 2015-01-22T22:06:48.433 に答える