2017-01-18 113 views
-1

我在EF中遇到了一些相關實體的問題。延遲加載問題EF MVC

這是我的產品類別:

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; } 
} 

這是產品詳細類:

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; } 

} 

的問題是,產品詳細沒有加載的產品,你可以在附見截圖,它給我一個錯誤:

enter image description here

ProductReferences加載正確,只有ProductDetails我有這個問題。 你能幫我解決這個問題嗎?我不知道是什麼會導致這個問題。 謝謝!

+2

請使用Include當您選擇 –

+0

您的查詢在哪裏? –

+2

當您嘗試訪問相關集合時是否收到異常或其他內容? –

回答

1

請使用包含在您選擇:如果要啓用延遲加載,那麼請檢查 這是在的DbContext類設置如果是假的也不會加載

_context.Product.Include('ProductDetails').ToList() 

。那麼你需要使用預先加載在我的答覆中提到

this.Configuration.LazyLoadingEnabled = true; 
+0

我試過這種方式,它很奇怪,因爲我得到這個錯誤:附加信息:指定的包含路徑無效。 EntityType'OnlineCarStore.DAL.Product'沒有聲明一個名爲'ProductDetail'的導航屬性。Altought我在產品類 – Orsi

+0

中有導航屬性,請檢查這個工作對你是否合適 –

+0

我試過用ProductDetail並且不工作var productList = db.Product.Include(「ProductDetail」); – Orsi

1

包括與這樣的產品詳細:

var products = await _ctx.Products 
       .Include(p => p.ProductDetails) 
       .ToListAsync(); 
0

我猜你也遇到了造成循環引用除外。請注意,產品包含對ProductDetails和ProductDetails的引用,而這些引用又包含對產品的引用。當你試圖序列化這個聚集(對象圖)時,引發循環引用異常。

最好的方法是使用DTO僅傳輸您想要在特定視圖中使用的數據。 DTO應該只有簡單的屬性,所以它不會創建循環引用錯誤。