亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

查詢列子集時的EF Core修復

查詢列子集時的EF Core修復

C#
慕娘9325324 2021-04-10 14:11:04
從文檔中:實體框架核心將自動將導航屬性修復為先前已加載到上下文實例中的任何其他實體。因此,即使您沒有顯式包含導航屬性的數據,但如果先前已加載某些或所有相關實體,也可能仍會填充該屬性。實體設置:public class Page{    public Page () {        Event = new HashSet<Event>();    }    [Key]    public int Id { get; set; }    public string Title { get; set; }    public string Content { get; set; } // don't want to retrieve, too large    public ICollection<Event> Event { get; set; }}public class Event{    [Key]    public int Id { get; set; }    public string Name { get; set; }    public string Type { get; set; }    public Page Page { get; set; }}上下文是通過一對多關系設置的。這些是我運行的查詢,一個接一個:var pages = _dbContext.Page.Select(page => new Page        {            Id = page.Id,            Title = page.Title        }).ToList();var events = _dbContent.Event.ToList();我希望每一個Page有Events收集填充(反之亦然為Event與Page基準),但修復過程不會發生(Page在Event是null,并且Event在Page為null)。如果我以此替換第一個查詢,則修復工作:var pages = _dbContext.Page.ToList();因此,似乎沒有進行修復的可能性。我之所以將其分為2個查詢,是為了避免使用類似的方法Include,因為它們會產生巨大的聯接并復制大量數據。有什么辦法解決嗎?我需要自己手動進行修復嗎?
查看完整描述

2 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

我認為那不行。您是否已驗證此行為在EntityFramework的早期版本中是否有效?因為,您沒有提取完整的實體,而是僅提取其實體,然后將其傳遞到新實體中,所以實際上您只是在選擇屬性并創建一個新實體。


如果您希望附加此文件,則可以在選擇頁面后手動調用附加方法


var pages = _dbContext.Page.Select(page => new Page

    {

        Id = page.Id,

        Title = page.Title

    }).ToList();


pages.ForEach(p => _dbContext.Page.Attach(p));

請記住,如果在此之后調用SaveChanges,則將丟失已卸載的屬性,因此僅在調用GetMethods時使用此屬性。


查看完整回答
反對 回復 2021-04-24
  • 2 回答
  • 0 關注
  • 257 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號