0

従来の EF の質問は次のように始まります: 私のモデルは

public class Ingredient
{
    public int IngredientID { get; set; }
    public virtual RequestedIngredient RequestedIngredient { get; set; }
    // other stuff
}

public class RequestedIngredient
{
    [Key]
    string BlahBlahBlah { get; set; }
    public int? IngredientID { get; set; }
    public virtual Ingredient Ingredient { get; set; }
}

dbContext のどこか...

        modelBuilder.Entity<Ingredient>()
            .HasOptional<RequestedIngredient>(e => e.RequestedIngredient)
            .WithOptionalPrincipal(e => e.Ingredient)
            .Map(e => e.MapKey("IngredientID"))
            .WillCascadeOnDelete(false);

しかし、指定されたスキーマが無効です。エラー: (195,6): エラー 0019: 型の各プロパティ名は一意である必要があります。プロパティ名 'IngredientID' は既に定義されています。

RequestedIngredient から IngredientID を削除すると、必要に応じてデータベースが作成されます。しかし、IngredientID にはアクセスできません。外部キーにアクセスできるようにこれを設定するにはどうすればよいですか?

4

1 に答える 1

0

これは一対一の関係ではありません。1 対 1 の関係では、外部キーは主キーでなければなりません。この例ではそうではありません。これは 1 対多ですが、関連付けが 1 つだけであることをアプリが処理すると想定しました。

EF は Independent Association を使用してこれに対処できます。POCOクラスから隠されている外部キーを作成します。私が行ったように、MapKey を使用して列の名前を指定できます。ただし、MapKey で使用される列と同じように、IngredientID というプロパティも作成したため、EF には 2 つのプロパティが同じ列にマップされるという問題があります。

そのようなことは EF で可能ですが、外部キーはもう使用できません。

于 2013-04-30T19:56:31.113 に答える