0

たとえば、私はPoductエンティティを持っています:

public class Product : DatabaseEntity
{
    public int Id {get; set;}
    public int Name {get; set;}
    public decimal Price {get; set;}

    ...
}

アイデアは、製品の類似製品の編集可能なコレクションを作成したいということです。したがって、多対多のようですが、同じエンティティ-製品上にあるため、モデルを次のように更新しました。

public class Product : DatabaseEntity
{
    public int Id {get; set;}
    public int Name {get; set;}
    public decimal Price {get; set;}

    public ICollection<Product> SimilarProducts { get; private set; }
    public void AddSimilar(Product product)
    {
       SimilarProducts.Add(product);
    }

    ...
}

DbContextまた、クラスを更新しました:

modelBuilder.Entity<Product>()
                .HasMany(p => p.SimilarProducts)
                .WithOptional()
                .WillCascadeOnDelete(false);

実装された商品編集アクション:

public ActionResult Edit(ProductEditModel productEditModel)
{

    if(!string.IsNullOrEmpty(productEditModel.SelectedSimilarProductLinkName))
    {
         var similarProduct = _productRepository.GetProduct(productEditModel.SelectedSimilarProductId);
         product.AddSimilar(similarProduct);
     }
    _productRepository.AddProduct(product);
}

void IProductRepository.AddProduct(製品製品);

public void AddProduct(Product product)
{
     _repository.InsertOrUpdate(product);
}

しかし、奇妙な結果が得られます。To product がProduct_Idデータベースに追加されたフィールドでありProductProduct、通常の多対多エンティティ実装のように、関連する製品 ID を格納するテーブルなどはありません。このテーブルを手動で作成するにはどうすればよいですか? 私は何が欠けているのか、何が間違っているのですか?

4

1 に答える 1