[英]EF6 Lazy Loading not working for a navigation property
我在其他可以正常工作的應用程序中有2個新實體,並修剪了不相關的屬性(所有內容均標記為虛擬):
QuoteOverrideRequest
public virtual int RequestedById { get; set; }
public virtual int QuoteId { get; set; }
public virtual int StatusId { get; set; }
//nav properties
public virtual Customer RequestedBy { get; set; }
public virtual Quote Quote { get; set; }
public virtual QuoteOverrideRequestStatus Status { get; set; }
所有3個導航屬性都以相同的方式映射。 當我創建一個新的QuoteOverrideRequest並將其插入時,RequestedBy和Quote會自動填充其實體。 狀態不是。
QuoteOverrideRequest request = new QuoteOverrideRequest();
request.QuoteId = quoteId;
request.RequestedById = _workContext.CurrentCustomer.Id;
request.StatusId = 1;
_quoteService.InsertOverrideRequest(request);
插入函數正在調用將對象添加到DbSet並調用DbContext.SaveChanges()的存儲庫。
我認為問題出在QuoteOverrideRequestStatus上,因為其他2個類延遲加載正確。 如果我在函數中較早地獲得了該Status的實例,它將在插入后顯示在Status屬性中。
QuoteOverrideRequestStatus類具有公共的無參數構造函數,並且其所有屬性都是虛擬的。
public partial class QuoteOverrideRequestStatus : BaseEntity
{
public QuoteOverrideRequestStatus() { }
public virtual string Name { get; set; }
public virtual int DisplayOrder { get; set; }
}
BaseEntity具有Id屬性。 我已經確認,在所有這些運行時,延遲加載和代理生成在DbContext上都是正確的。
new QuoteOverrideRequest()
這是不正確的。 延遲加載不適用於您使用new
關鍵字實例化的模型的屬性。
您應該使用db.Set<T>().Create()
,其中db
是您的DbContext
實例,而T
是您的模型。
這將實例化模型的正確代理對象,從而啟用延遲加載導航屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.