首先使用EF 4.1代码进行多对一配置

时间:2011-05-01 00:00:28

标签: ef-code-first many-to-one

我有以下课程:

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"));

我正在努力确保每当我从数据库中检索cartitem时,产品表上都会有一个连接,这样我就可以访问产品属性,但不能反过来。

我基本上希望能够做到:

string title = cartItem.Product.Title

使用我的配置给了我一个Object引用,但没有设置为对象异常的实例。

1 个答案:

答案 0 :(得分:0)

简短回答:要解决您的问题,请制作Product属性virtual

在深度:

首先,您需要加入才能执行此操作。 EF在延迟加载时工作正常(需要virtual修饰符)

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

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

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

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