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

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

EF Core:一對多不是急切加載

EF Core:一對多不是急切加載

C#
qq_遁去的一_1 2022-07-23 09:04:42
鑒于 Post 的對象模型有很多 PostTranslation,我設置了兩個對象:public partial class Post{    public Post()   {        PostTranslations = new HashSet<PostTranslation>();    }    public int Id { get; set; }    public string Name { get; set; }    public ICollection<PostTranslation> PostTranslations { get; set; }}public partial class PostTranslation {    public int Id { get; set; }    public string Title { get; set; }    public int PostId { get; set; }    public Post Post { get; set; }}在我的上下文類中,在 OnModelBuilding 中,我有以下內容:modelBuilder.Entity<Post>(entity => {    entity.ToTable("Posts");    entity    .HasMany<PostTranslation>(x => x.PostTranslations)    .WithOne(g => g.Post)    .HasForeignKey(g=>g.PostId);});在我的存儲庫中,我調用以下內容:db.Posts.Include(t=>t.PostTranslations).ToList();但在檢查生成的 SQL 時,PostTranslations 從未加入,并且 Post 對象上的哈希集始終為零。有翻譯,它們在數據庫中正確連接。如果我直接查詢它們,我可以從數據上下文中獲取 PostTranslations。但我似乎無法讓 EFCore 使用簡單的 .Include 語句急切加載它們。我錯過了什么?編輯 生成的 SQL 是這樣的:SELECT [f].[Id],  [f].[Name] FROM [common].[Posts] AS [f]我預計會在那里看到 PostTranslations 的左連接,所以在我迭代 ToList() 中的變量之后,翻譯就會在那里。并且在模型構建器中設置了“通用”模式:modelBuilder.HasDefaultSchema("common");
查看完整描述

1 回答

?
白板的微信

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

事實證明,這是一個命名空間問題。這是一個重構的存儲庫,在它的頂部,有:

using System.Data.Entity;

使用該命名空間,正確編譯了 .Include 語句,但 EFCore 沒有獲取關系。添加:

using Microsoft.EntityFrameworkCore;

突然,SQL 正在為急切的負載正確生成連接。


查看完整回答
反對 回復 2022-07-23
  • 1 回答
  • 0 關注
  • 127 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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