EF你可以使用阴影属性制作一个Mutli列索引吗?

时间:2017-12-12 20:16:39

标签: c# entity-framework sqlite entity-framework-core ef-fluent-api

我尝试使用shadow属性创建多列唯一索引。我知道我可以通过添加一个属性来解决这个问题,但是我想看看这是否可行而不用这样做以保持我的模型清洁。

要创建多列索引,您在Fluent API中有以下选项:

modelBuilder.Entity<AlbumTrack>().HasIndex(t => new { t.TrackNumber, t.AlbumId).IsUnique();

但我不想使用额外的AlbumId属性来混淆我的模型,因此想要使用阴影属性,对于单个列,这是有效的:

modelBuilder.Entity<AlbumTrack>().HasIndex(t => EF.Property<int>(t,"AlbumId")).IsUnique();

但对于使用阴影属性的多列索引,如下面的

modelBuilder.Entity<AlbumTrack>()
    .HasIndex(t => new { t.TrackNumber, EF.Property<int>(t,"AlbumId")})
    .IsUnique();

我在vscode

中收到以下错误
  

无效的匿名类型成员声明符。必须使用成员分配,简单名称或成员访问声明匿名类型成员。

任何人都知道如何使用阴影属性来实现这一点,还是不可能?

1 个答案:

答案 0 :(得分:4)

这是可能的。您只需使用HasIndex过载params string[] propertyNames

首先确保定义了shadow属性:

modelBuilder.Entity<AlbumTrack>()
    .Property<int>("AlbumId");

然后定义索引:

modelBuilder.Entity<AlbumTrack>()
    .HasIndex("TrackNumber", "AlbumId")
    .IsUnique();