EF 6.2具有多个(重叠)列的唯一约束未正确生成

时间:2018-11-15 09:50:33

标签: c# .net entity-framework

我使用Fluent API配置我的唯一约束(EF 6.2),并具有以下配置:

modelBuilder.Entity<TagDTO>().HasIndex(p => new { p.SiteId, p.InputId, p.Name }).IsUnique();
modelBuilder.Entity<TagDTO>().HasIndex(p => new { p.SiteId, p.InputId, p.SqlColumn }).IsUnique();

这样,我可以使用多个列配置唯一约束。如果NameSqlColumn相同,则InputIdSiteId必须不存在。

由于模型中的继承关系,我无法使用属性来配置这些属性。必须使用Fluent API进行配置。

现在的问题是:迁移的迁移看起来像这样:

...
.Index(t => new { t.SiteId, t.InputId, t.Name }, unique: true)
.Index(t => t.SqlColumn, unique: true, name: "IX_SiteId_InputId_SqlColumn")
...

在执行此迁移时,在MS SQL中仅正确配置了NameSqlColumn没有具有多列的唯一约束。切换两条Fluent API行时,SqlColumn是正确的,而Name是错误的。

为什么SqlColumn上的索引没有配置对象?是因为列(SiteIdInputId)重叠造成的。在SQL中手动更改它是可行的,因此成为可能。

这是EF中的错误吗?有没有人解决这个问题?

SiteId:表站点的ForeignKey。 InputId:表Input的ForeignKey。 NameSqlColumn:不是主键,只是字符串列

谢谢。

编辑:确实可以手动更改迁移代码,但这不是解决方案。

...
.Index(t => new { t.SiteId, t.InputId, t.Name }, unique: true)
.Index(t => new { t.SiteId, t.InputId, t.SqlColumn }, unique: true)
...

0 个答案:

没有答案