1

関係の片側にショートカットを使用して、多対多の関係を設定しようとしています。いくつかのコードで説明する方が簡単です。

public class Product
{
    public int Id { get; set; }
    public string Description { get; set; }
    public virtual ICollection<Order> Orders { get; set; }
}

public class Order
{
    public int Id { get; set; }
    public string Customer { get; set; }
    public virtual ICollection<OrderDetail> Details { get; set; }
}

public class OrderDetail
{
    public int Id { get; set; }
    public Order Order { get; set; }
    public Product Product { get; set; }
    public int Quantity { get; set; }
}

ご覧のとおり、注文の詳細を注文側に記載したいと思います。ただし、商品面では、リンクされた注文のみを希望します。EFは、OrdersテーブルにProducty_Id FKを追加するため、間違ったデータベーススキーマを生成します。

私は特定のモデル作成の指示を与えようとしましたが、成功しませんでした:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Product>().HasMany(x => x.Orders);
}

助けてくれてありがとう!ファビアン

4

1 に答える 1

1

注文の詳細を注文側に記載したいのですが。しかし、製品側では、リンクされた注文のみが必要です。EF は、Orders テーブルに Producty_Id FK を追加するため、間違ったデータベース スキーマを生成します。

これは EF では不可能です。マップされていないプロパティにして、プロパティ内のロジックを手動で実装することができます。しかし、それは漏れやすい抽象化になります。

適切な方法は、OrderDetailコレクション プロパティをProductエンティティにマップすることです。

public class Product
{
    public int Id { get; set; }
    public string Description { get; set; }
    public virtual ICollection<OrderDetail> OrderDetails { get; set; }
}
于 2012-06-14T13:16:04.627 に答える