我有以下课程:
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引用,但没有设置为对象异常的实例。
答案 0 :(得分:0)
简短回答:要解决您的问题,请制作Product
属性virtual
。
在深度:
首先,您不需要加入才能执行此操作。 EF在延迟加载时工作正常(需要virtual
修饰符)
其次,您可以使用Include
扩展方法热切地获取产品。例如:
var cartItem = context.CartItems.Include(x => x.Product)
.Where(/*some condition*/).ToList();
...但你无法将其配置为默认行为(通常也不是一个好主意)
第三,这是多对一的关系,而不是一对一的关系(产品有许多相关的CartItems)