【问题标题】:MySQL / EF 6.0 Core One-to-One relationship returns nullMySQL / EF 6.0 Core 一对一关系返回 null
【发布时间】: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


    【解决方案1】:

    在WithOne之后调用HasForeignKey并指向OwnerId。

    【讨论】:

    • 我试过了。它没有用。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 2019-06-15
    • 2019-07-25
    • 2014-11-24
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    相关资源
    最近更新 更多