Dir*_*oer 2 entity-framework-core ef-core-3.1
我有以下两个实体使用 EF Core 中的拆分表选项引用一个表 - 这是一个非常简化的版本:
class Account
int Id
Settings Settings
class Settings
int AccountId (maps to Id)
string PropertyX
Run Code Online (Sandbox Code Playgroud)
从文档中:
如果数据库中依赖实体使用的所有列均为 NULL,则在查询时不会创建该实体的实例。这允许对可选的依赖实体进行建模,其中主体上的关系属性将为空。请注意,如果所有依赖项的属性都是可选的并设置为 null,也会发生这种情况,这可能是意想不到的。
是否可以禁用此行为?我有多个列,其中有很多默认为空的分组行为。
现在默认情况下不会创建实体(设置)。这意味着我必须到处进行空检查。我宁愿使用所有属性的空值创建设置。
如果我自己在父实体(帐户)的构造函数中创建实例,则似乎不会跟踪更改,因为我猜 EF Core 不知道该类。
有什么解决办法吗?
不幸的是,此功能在 EF Core 3 中不可用。
EF Core 5.0 中添加了所谓的必需依赖项-必需的 1:1 依赖项:
在 EF Core 3.1 中,一对一关系的依赖端始终被视为可选。这在使用自有实体时最为明显,因为所有自有实体的列在数据库中都被创建为可为空,即使它们是根据模型中的要求进行配置的。
在 EF Core 5.0 中,可以将到拥有实体的导航配置为所需的依赖项
以上只是“新增功能”部分中该功能的公告。事实上,它可以用于任何一对一关系,如官方一对一文档部分所述:
默认情况下,从属端被视为可选,但可以根据需要进行配置。但是 EF 不会验证是否提供了依赖实体,因此只有当数据库映射允许强制执行时,此配置才会产生影响。一个常见的场景是默认使用表拆分的引用拥有的类型
要根据需要配置依赖项,您必须结合使用NavigationFluent API(也在 5.0 中引入)IsRequired:
modelBuilder.Entity<Account>()
.Navigation(e => e.Settings)
.IsRequired();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1556 次 |
| 最近记录: |