1

我有以下两个实体使用 EF Core 的拆分表选项引用一个表 - 这个非常简化的版本:

class Account
    int Id
    Settings Settings
    
class Settings
    int AccountId (maps to Id)
    string PropertyX
    

文档中:

如果依赖实体使用的所有列在数据库中均为 NULL,则查询时不会为其创建实例。这允许对可选的依赖实体进行建模,其中主体上的关系属性将为空。请注意,如果依赖项的所有属性都是可选的并设置为 null,这也会发生,这可能不是预期的。

是否可以禁用此行为?我有多个列,其中包含许多默认为空的分组行为。

现在默认情况下不会创建实体(设置)。这意味着我必须在任何地方进行空检查。我宁愿为所有属性创建使用空值的设置。

如果我自己在父实体(帐户)的构造函数中创建实例,则似乎不会跟踪更改,因为我猜 EF Core 不知道该类。

有什么解决办法吗?

4

1 回答 1

2

不幸的是,此功能在 EF Core 3 中不可用。

EF Core 5.0 中添加了所谓的必需依赖项 -必需的 1:1 依赖项

在 EF Core 3.1 中,一对一关系的依赖端始终被认为是可选的。这在使用自有实体时最为明显,因为所有自有实体的列都在数据库中创建为可为空,即使它们是按照模型中的要求进行配置的。

在 EF Core 5.0 中,可以将导航到拥有的实体配置为所需的依赖项

以上只是What's New部分中的功能公告。事实上,它可以用于任何一对一的关系,如官方的一对一文档部分所述:

默认情况下,从属端被认为是可选的,但可以根据需要进行配置。但是,EF 不会验证是否提供了依赖实体,因此此配置仅在数据库映射允许强制执行时才会产生影响。一个常见的场景是引用拥有的类型,默认情况下使用表拆分

要根据需要配置依赖项,您必须使用Navigationfluent API(也在 5.0 中引入)并结合IsRequired

modelBuilder.Entity<Account>()
    .Navigation(e => e.Settings)
    .IsRequired();
于 2021-10-21T22:33:26.833 回答