【发布时间】:2021-12-31 07:01:09
【问题描述】:
我正在使用带有 MySQL 的 EF Core 6.0 (Pomelo.EntityFrameworkCore.MySql v6.0) 我首先通过代码设置我的数据库。这是我的 2 个模型(简化):
public class Store : BaseEntity
{
public string Name { get; set; }
public virtual User? Owner { get; set; }
public int? OwnerId { get; set; }
}
public class User : BaseEntity
{
public string? Name { get; set; }
public virtual Store? Store { get; set; }
}
对于两者,我都有
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
作为主键(来自 BaseEntity)。
我也在这里启用了延迟加载:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseLazyLoadingProxies();
}
在 Program.cs 中:
builder.Services.AddDbContext<AppDbContext>(opt => opt
.UseLazyLoadingProxies()
.ConfigureWarnings(warning => warning.Ignore(CoreEventId.DetachedLazyLoadingWarning))
.EnableSensitiveDataLogging()
.UseMySql(
Globals.DB_CONNECTION_STRING, new MySqlServerVersion(Globals.MYSQL_SERVER_VERSION),
o => o.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery)
));
现在,解决问题 - 我正在尝试使用以下代码从数据库中获取商店:
Store? store = await dbContext.Stores
.Include(x => x.Owner)
.FirstOrDefaultAsync(x => x.Owner.Id == ownerId && x.Id == storeId);
我正在获取商店详细信息,但 Owner 对象和 OwnerId 为空。我可以看到数据库中的数据(例如,我看到为这个特定商店设置了 OwnerId),但在代码中,它是 null。
我在 SO 上读到 Pomelo 在设置导航属性方面存在一些问题,因此我在 OnModelCreating 中手动设置如下:
modelBuilder.Entity<User>()
.HasOne(x => x.Store)
.WithOne(x => x.Owner)
;
但这并没有成功。
相同的配置与 MSSQL 完美配合。
有什么想法吗?
谢谢
【问题讨论】:
标签: mysql entity-framework .net-core entity-framework-6 c#-6.0