第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么時候需要在 Entity Framework 中包含相關(guān)實體?

什么時候需要在 Entity Framework 中包含相關(guān)實體?

C#
瀟瀟雨雨 2022-11-21 20:18:06
當我必須實際.Include()關(guān)聯(lián)實體而當我不需要時,這對我來說似乎是任意的。在某些情況下,EF 會在沒有它的情況下為我提供相關(guān)實體的信息,而在其他情況下,它無法對相關(guān)實體執(zhí)行任何操作,因為我沒有包括它們:在沒有 .Include() 的情況下工作;這是我在沒有 .Include(); 的情況下加載數(shù)據(jù)的示例。public class InvoiceService{    private ApplicationDbContext db { get; set; }    public InvoiceService(ApplicationDbContext context)    {        db = context;    }    public Invoice Get(int id)    {        return db.Invoices.SingleOrDefault(x => x.Id == id);    }}public partial class ShowInvoice : System.Web.UI.Page{    private InvoiceService invoiceService;    private readonly ApplicationDbContext context = new ApplicationDbContext();    protected void Page_Load(object sender, EventArgs e)    {        invoiceService = new InvoiceService(context);        if (!IsPostBack)        {            int.TryParse(Request.QueryString["invoiceId"].ToString(), out int invoiceId);            LoadInvoice(invoiceId);        }    }    private void LoadInvoice(int invoiceId)    {        var invoice = invoiceService.Get(invoiceId);        // Other code irrelevant to the question goes here.    }}下面是結(jié)果,其中包括與我要求的發(fā)票相關(guān)的公司數(shù)據(jù):如您所見,公司的信息肯定是通過了,但沒有明確包含在內(nèi)。沒有 .Include(); 就無法工作;相反,我在同一個項目中完成了一些與發(fā)票有關(guān)的映射,并且在獲取相關(guān)實體屬性值時出現(xiàn)了 NullReferenceExceptions,因為我沒有這樣做.Include()。此方法獲取指定公司的所有已批準時間表條目。此視圖模型專門用于處理發(fā)票的時間表條目的關(guān)聯(lián)(因此您根據(jù)所選的時間表條目開具發(fā)票)。public List<InvoiceTimesheetViewModel> GetInvoiceTimesheetsByCompanyId(int companyId){    var factory = new TimesheetViewModelsFactory();    var timesheets = db.Timesheets.Where(x => x.Approved && x.Company.Id == companyId && !x.Deleted).ToList();    return factory.GetInvoiceTimesheetsViewModel(timesheets);}要解決這些問題,我必須將獲取數(shù)據(jù)的查詢更改為以下內(nèi)容:var timesheets = db.Timesheets.Include(i => i.StaffMember).Include(i => i.Task)            .Where(x => x.Approved && x.Company.Id == companyId && !x.Deleted).ToList();為什么 Entity Framework 有時很樂意在我沒有明確請求數(shù)據(jù)的情況下為我提供數(shù)據(jù),有時卻要求我明確請求數(shù)據(jù),否則會拋出錯誤?我怎么知道什么時候需要明確包含我正在尋找的數(shù)據(jù),什么時候不需要?
查看完整描述

2 回答

?
慕絲7291255

TA貢獻1859條經(jīng)驗 獲得超6個贊

實體框架使用延遲加載來加載子關(guān)系。為了延遲加載模型中的工作屬性應該用virtual關(guān)鍵字標記。Ef 覆蓋它并添加延遲加載支持。


當您沒有虛擬財產(chǎn)時,EF 以后無法加載您的子關(guān)系數(shù)據(jù),因此唯一可能的情況是 - 在初始數(shù)據(jù)加載期間使用Include.


public class Timesheet

{

    ...

    public virtual StaffMember StaffMember { get; set; }

    public virtual Task Task { get; set; }

    ...

}


查看完整回答
反對 回復 2022-11-21
?
眼眸繁星

TA貢獻1873條經(jīng)驗 獲得超9個贊

這取決于你的模型。如果您已將關(guān)系屬性標記為,virtual那么您將需要使用.Include它,以便 EF 知道您需要它。這是延遲加載。保留機器的內(nèi)存和數(shù)據(jù)庫請求。



查看完整回答
反對 回復 2022-11-21
  • 2 回答
  • 0 關(guān)注
  • 105 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號