4

最初にコードで素晴らしい EF5 を使用しようとしています。ここでは、追加のフィールドを使用して多対多のテーブルを作成する必要があります。

製品テーブル、注文テーブルがあり、「サイズ」フィールドを持つ注文中の製品のテーブルが必要です。

私が行ったことは、それらの間の接続テーブルである「ProductOrder」の新しいクラスを作成し、参照を作成することです。

新しい注文を作成するときは機能しますが、注文をフェッチするときは機能しません-接続された注文(挿入後にDBに存在する)を取得しません。

アイデアはなぜですか?:)

私のクラスは次のとおりです。

public class Order
{
    public int ID { get; set; }
    ...
    public ICollection<ProductOrder> Products { get; set; }
    public Order()
    {
        Products = new HashSet<ProductOrder>();
    }
}

public class Product
{
    public int ID { get; set; }
    public ICollection<ProductOrder> Orders { get; set; }
}

public class ProductOrder
{
    public int ID { get; set; }
    public int ProductID { get; set; }
    public int OrderID { get; set; }
    public int Size { get; set; }

    [ForeignKey("OrderID")]
    public Order order { get; set; }

    [ForeignKey("ProductID")]
    public Product product { get; set; }
}

および onModelCreating で

    modelBuilder.Entity<Order>()
        .HasMany(p => p.Products)
        .WithRequired(o => o.order)
        .HasForeignKey(o => o.OrderID);

    modelBuilder.Entity<Product>()
        .HasMany(o => o.Orders)
        .WithRequired(p => p.product)
        .HasForeignKey(p => p.ProductID);
4

2 に答える 2

3

ナビゲーション プロパティは仮想である必要があります

于 2012-12-10T16:16:34.253 に答える
0

私が見たところ、ナビゲーション プロパティを仮想としてマークすると、それらのプロパティの遅延読み込みがオンになります。

遅延読み込みなしでこれを機能させるもう 1 つの方法は.include()、select にステートメントを追加することです。これにより、必要な余分なデータをプルバックするように EF に指示されます。

于 2012-12-10T20:43:29.040 に答える