EF 可以使用影子属性制作多列索引吗?

EF can you make a Mutli-column Index using shadow properties?

我正在尝试使用阴影创建多列唯一索引 属性。我知道我可以通过添加一个 属性 来解决这个问题,但我想看看这是否可以保持我的模型干净。

要创建多列索引,您可以在 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();

但是我的 IDE 抛出以下错误:

Invalid anonymous type member declarator. Anonymous type members must be declared with a member assignment, simple name or member access.

任何人都知道如何使用影子属性来做到这一点,或者这是不可能的?

编辑:各种语法错误。

有可能。您可以简单地将 HasIndex 重载与 params string[] propertyNames.

一起使用

首先确保阴影 属性 已定义:

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

然后定义索引:

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