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

深入:

首先,您不需要加入即可执行此操作。EF 适用于延迟加载(您需要virtual修饰符)

其次,您可以使用Include扩展方法急切地获取产品。例子:

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

...但是您不能将其配置为默认行为(通常也不是一个好主意)

第三,这是多对一的关系,不是一对一的(一个产品有很多相关的CartItems)

于 2011-05-01T03:16:05.927 回答