0

次のクラスがあります。

public class CartItem
{
    public long Id { get; set; }
    public int Quantity { get; set; }
    public Product Product { get; set; }
}

public class Product    {
    public long Id { get; set; }
    public string Title { get; set; }
    public decimal Price { get; set; }
}

現在、次の構成があります。

modelBuilder.Entity<CartItem>().HasRequired(x => x.Product).WithMany().Map(x => x.MapKey("ProductId"));

データベースから caritem を取得するたびに、製品テーブルに結合があることを確認しようとしています。これにより、製品のプロパティにアクセスできますが、その逆はできません。

私は基本的にできるようにしたい:

string title = cartItem.Product.Title

私が持っている構成を使用すると、オブジェクト例外のインスタンスに設定されていないオブジェクト参照が得られます。

4

1 に答える 1

0

簡単な答え: 問題を解決するには、Productプロパティを作成しますvirtual

詳細:

まず、これを行うために参加する必要はありませんvirtualEF は遅延読み込みで正常に動作します (修飾子が必要です)

次に、Include拡張メソッドを使用して製品を積極的に取得できます。例:

var cartItem = context.CartItems.Include(x => x.Product)
                      .Where(/*some condition*/).ToList();

...しかし、これをデフォルトの動作に設定することはできません (また、通常は良い考えではありません)。

第 3 に、これは 1 対 1 ではなく、多対 1 の関係です (製品には多くの関連する CartItems があります)。

于 2011-05-01T03:16:05.927 に答える