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

时间:2019-06-09 20:22:48

标签: c# ef-migrations ef-core-2.2

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

该问题和解决方法同时适用于HasAlternateKeyHasIndex。该解决方案构建良好,但是在创建迁移时会忽略该约束,直到shadow属性在domain类中变为实属性为止。

这不起作用(迁移会忽略此内容):

entity.HasAlternateKey(e => new { e.Header.Id, e.Version, e.StartDate });

在将阴影属性HeaderID转换为真实的对象之后,这确实起作用:

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

1 个答案:

答案 0 :(得分:2)

Fluent API不支持e.Header.Id之类的嵌套属性表达式。

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

在您的情况下:

entity.HasAlternateKey("HeaderId", "Version", "StartDate");
entity.HasOne(e => e.Header).WithMany().HasForeignKey("HeaderId");