2

多対多の関係があり、中間クラスを追加したいと考えています。これにより、リポジトリ パターンを使用して多対多の関係を追加できるようになります。

私が理解できないのはマッピングです。

これが構造です

public class Product
{
    public Product()
    {
        Categories = new HashSet<Category>();
    }

    public int  Id { get; set; }
    public string Name { get; set; }

    public ICollection<Category> Categories { get; set; }
}

public class Category
{
    public int Id { get; set; }
    public String Name { get; set; }

    public ICollection<Product> Products { get; set; }

}

public class PCMap
{
    public int product_id { get; set; }
    public int category_id { get; set; }

    public Product Product { get; set; }
    public Category Category { get; set; }
}

そしてマッピング

modelBuilder.Entity<Product>()
    .HasEntitySetName("PCMap")
    .HasMany(p=>p.Categories)
    .WithMany(p=>p.Products)
    .Map(m=>
        {
            m.MapLeftKey("product_id");
            m.MapRightKey("category_id");
            m.ToTable("PCMap");
        });

modelBuilder.Entity<PCMap>()
    .ToTable("PCMap");

modelBuilder.Entity<PCMap>().HasKey(k => new
    {
        k.category_id,
        k.product_id
    });

modelBuilder.Entity<PCMap>()
    .HasRequired(p=>p.Product)
    .WithMany()
    .HasForeignKey(p => p.product_id);

modelBuilder.Entity<PCMap>()
    .HasRequired(p => p.Category)
    .WithMany()
    .HasForeignKey(p => p.category_id);

これが私が得るエラーです..これを修正するにはどうすればよいですか?

ここに画像の説明を入力

4

1 に答える 1

3

あなたがそれを設定した方法。PCMapはエンティティではなく、内部で M:N 結合を容易にするために使用されます。

Product p = new Product();
p.Categories ...

Category c = new Category();
c.Products ...

ここでは、製品エンティティ定義の一部として PC を既に定義しているためです。

.Map(m=>
        {
            m.MapLeftKey("product_id");
            m.MapRightKey("category_id");
            m.ToTable("PCMap");
        });

以下で個別に、再度定義する必要はないと思います(または定義することは可能です)。このコードをすべて削除してみてください。

modelBuilder.Entity<PCMap>()
    .ToTable("PCMap");
modelBuilder.Entity<PCMap>().HasKey(k => new
    {
        k.category_id,
        k.product_id
    });

modelBuilder.Entity<PCMap>()
    .HasRequired(p=>p.Product)
    .WithMany()
    .HasForeignKey(p => p.product_id);

modelBuilder.Entity<PCMap>()
    .HasRequired(p => p.Category)
    .WithMany()
    .HasForeignKey(p => p.category_id);
于 2012-09-07T13:46:04.127 に答える