2

エンティティ フレームワークと流暢な API を使用して多対多の関係を構築しようとしていますが、エントリの重複を許可しようとして行き詰まっています。ここに私が持っているものがあります:

public class Pizza
{
    public int PizzaId { get; set; }
    public virtual ICollection<Topping> Toppings { get; set; }
}

public class Topping
{
    public int ToppingId { get; set; }
}
  • どんなピザでも、複数のトッピングができるはずです。
  • 任意のトッピングを複数のピザに適用できます。

だからOnModelCreating()私は呼び出します:

modelBuilder.Entity<Pizza>()
            .HasMany(p => p.Toppings)
            .WithMany()
            .Map(m => m.ToTable("ToppingsForPizza"));

これにより、多対多の関係が得られますが、問題は、ピザに同じトッピングの複数のインスタンスを含めることができるようにすることです (例: ダブルペパロニ)

生成されたToppingsForPizzaデータベースはそれをサポートできません...一意の主キーが必要なためだと思います。

これを行う方法はありますか?

編集:私の実際の問題はピザとは関係ありません。これは私が思いついた例にすぎません。

4

3 に答える 3

2

多対多の関係に別の主キーを追加する必要があります。つまり、それ自体がエンティティになるということです

public class PizzaTopping
{   
    public int PizzaToppingId { get; set; }
    public int PizzaId { get; set; }
    public int ToppingId { get; set; }

    public virtual Pizza Pizza { get; set; }
    public virtual Topping Topping { get; set; }
}

public class Pizza
{ 
     public int PizzaId { get; set; } 
     public virtual ICollection<PizzaTopping> PizzaToppings { get; set; }
}

public class Topping
{   
     public int ToppingId { get; set; }
     public virtual ICollection<PizzaTopping> PizzaToppings { get; set; }
}

ピザとトッピングに適用してもあまり意味がありません..... ;-)

于 2013-10-04T03:42:56.960 に答える