【发布时间】:2020-02-09 07:20:17
【问题描述】:
当打开延迟加载时,我的导航属性似乎正在急切地加载。 我有一个这样的 DBContext 设置
public class BBBankContext : DbContext
{
public BBBankContext(DbContextOptions<BBBankContext> options)
: base(options)
{ }
public DbSet<Account> Accounts { get; set; }
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Account>(b =>
{
b.HasData(new Account
{
Id = "37846734-172e-4149-8cec-6f43d1eb3f60",
AccountNumber = "0001-1001",
AccountTitle = "Raas Masood",
CurrentBalance = 2342.34,
Email = "raasmasood@hotmail.com",
PhoneNumber = "6096647000",
AccountStatus = AccountStatus.Active
});
b.OwnsOne(e => e.User).HasData(new
{
AccountId = "37846734-172e-4149-8cec-6f43d1eb3f60",
Id = Guid.NewGuid().ToString(),
AuthID = Guid.NewGuid().ToString(),
Name = "Raas Masood",
ProfilePicUrl = "https://www.gravatar.com/avatar/205e460b479e2e5b48aec07710c08d50"
});
});
}
}
我不希望加载导航属性“用户”,除非我使用“包含”。但它会自动加载。在我的启动中,我有这样的配置。
services.AddDbContext<BBBankContext>(
b => b.UseSqlServer(connection)
.UseLazyLoadingProxies(false) //Install-Package Microsoft.EntityFrameworkCore.Proxies -Version 3.1.1
);
实体看起来像这样
public class Account : BaseEntity
{
public string AccountNumber { get; set; }
public string AccountTitle { get; set; }
public double CurrentBalance { get; set; }
public string Email { get; set; }
public string PhoneNumber { get; set; }
public AccountStatus AccountStatus { get; set; }
public virtual User User { get; set; }
}
public enum AccountStatus
{
Active = 0,
InActive = 1
}
public class User : BaseEntity
{
public string AuthID { get; set; }
public string Name { get; set; }
public string ProfilePicUrl { get; set; }
}
public class BaseEntity
{
[Key]
public string Id { get; set; }
}
因为延迟加载设置为 false。我希望“用户”为空
【问题讨论】:
-
延迟加载意味着导航属性一被调用就会自动加载。如果要使用“包含”,则必须使用急切加载而不是延迟加载
-
所以我设置了 UseLazyLoadingProxies(false) 这意味着当我加载导航属性时不应该加载。但它正在加载。
-
我刚刚用图片更新了问题。因为延迟加载设置为false。我希望“用户”为空
-
尝试像这样添加用户数据:
modelBuilder.Entity<User>(b => { b.HasData(new User { AccountId = "37846734-172e-4149-8cec-6f43d1eb3f60", Id = Guid.NewGuid().ToString(), AuthID = Guid.NewGuid().ToString(), Name = "Raas Masood", ProfilePicUrl = "https://www.gravatar.com/avatar/205e460b479e2e5b48aec07710c08d50" }) -
现在当我运行时用户为空但是当我包含用户“返回等待 DbSet.Include("User").ToListAsync();"它仍然是空的。 DbSet 设置为 _context
()
标签: entity-framework entity-framework-core lazy-loading