從文檔中:實體框架核心將自動將導航屬性修復為先前已加載到上下文實例中的任何其他實體。因此,即使您沒有顯式包含導航屬性的數據,但如果先前已加載某些或所有相關實體,也可能仍會填充該屬性。實體設置: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時使用此屬性。
- 2 回答
- 0 關注
- 257 瀏覽
添加回答
舉報
0/150
提交
取消