EF Core - 唯一约束,包括迁移中未检测到的导航属性

Ste*_*Kok 2 c# entity-framework-migrations ef-core-2.2

我正在尝试应用唯一的复合约束,约束的一部分是外键。我似乎让它工作的唯一方法是在我的域类中显式定义外键,这是我想避免的。这可能吗?

该问题和解决方法适用于HasAlternateKeyHasIndex。该解决方案构建良好,但在创建迁移时会忽略约束,直到影子属性转换为域类中的真实属性。

这不起作用(迁移会忽略这一点):

entity.HasAlternateKey(e => new { e.Header.Id, e.Version, e.StartDate });
Run Code Online (Sandbox Code Playgroud)

将影子属性 HeaderID 转换为真实属性后,这确实有效:

entity.HasAlternateKey(e => new { e.HeaderId, e.Version, e.StartDate });
entity.HasOne(e => e.Header).WithMany().HasForeignKey(f => f.HeaderId);
Run Code Online (Sandbox Code Playgroud)

Iva*_*oev 5

Fluent API 不支持嵌套属性表达式,例如e.Header.Id.

与通常的影子属性一样,您应该使用相应 Fluent API 的重载按名称引用它们。string

在你的情况下:

entity.HasAlternateKey("HeaderId", "Version", "StartDate");
entity.HasOne(e => e.Header).WithMany().HasForeignKey("HeaderId");
Run Code Online (Sandbox Code Playgroud)