我在EF中遇到一些相关实体的问题。
这是我的产品类:
public class Product
{
public int Id { get; set; }
public int AtpID { get; set; }
public int SupplierID { get; set; }
public string AtpName { get; set; }
public string Name { get; set; }
public string ArticleNo { get; set; }
public string SupplierNo { get; set; }
public string AtpPrice { get; set; }
public string AtpStock { get; set; }
public string AtpDeliveryDays { get; set; }
public bool FitsAllCars { get; set; }
public int? CategoryId { get; set; }
public virtual ICollection<ProductReference> ProductReferences { get; set; }
public virtual ICollection<ProductDetail> ProductDetails { get; set; }
}
这是ProductDetails类:
public class ProductDetail
{
public int Id { get; set; }
[ForeignKey("ProductId")]
public virtual Product Product { get; set; }
public int ProductId { get; set; }
public int ProductDetailTypeId { get; set; }
public int ProductDetailKeyId { get; set; }
public string AtpTextKey { get; set; }
public string AtpTextValue { get; set; }
public string TextKey { get; set; }
public string TextValue { get; set; }
public bool IsVisible { get; set; }
public bool Checked { get; set; }
}
问题是没有为产品加载ProductDetails,正如您在附带的屏幕截图中看到的那样,它给了我一个错误:
正确加载ProductReferences,只有ProductDetails我才遇到这个问题。 你能帮我解决这个问题吗?我不知道是什么原因导致了这个问题。 谢谢!
答案 0 :(得分:1)
请在选择时使用Include:
_context.Product.Include('ProductDetails').ToList()
如果您想启用延迟加载,请检查 这是在DBContext类中设置的,如果为false,则不会加载。然后你需要使用我的回答
中提到的Eager Loading this.Configuration.LazyLoadingEnabled = true;
答案 1 :(得分:1)
包含ProductDetails,如下所示:
var products = await _ctx.Products
.Include(p => p.ProductDetails)
.ToListAsync();
答案 2 :(得分:0)
我猜你遇到了循环引用引起的异常。请注意,Product包含对ProductDetails的引用,而ProductDetails则包含对Product的引用。当您尝试序列化此聚合(对象图)时,将抛出循环引用异常。
最佳方法是使用DTO仅传输您要在特定视图中使用的数据。 DTO应该只具有简单的属性,因此不会创建循环引用错误。