簡體   English   中英

EF6延遲加載不適用於導航屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM