我正在嘗試使用shadow屬性創建一個多列唯一索引。我知道我可以通過添加一個屬性來解決這個問題,但我想看看這是否可行,如果不這樣做,以保持我的模型乾淨。
要創建多列索引,您在Fluent API中有以下選項:
modelBuilder.Entity<AlbumTrack>().HasIndex(t => new { t.TrackNumber, t.AlbumId).IsUnique();
但我不想使用額外的AlbumId屬性來混淆我的模型,因此想要使用shadow屬性,對於單個列,這可以工作:
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中收到以下錯誤
無效的匿名類型成員聲明符。必須使用成員分配,簡單名稱或成員訪問聲明匿名類型成員。
任何人都知道如何使用陰影屬性這樣做,還是不可能?
這是可能的。您可以使用params string[] propertyNames
簡單地使用HasIndex
重載。
首先確保定義了shadow屬性:
modelBuilder.Entity<AlbumTrack>()
.Property<int>("AlbumId");
然後定義索引:
modelBuilder.Entity<AlbumTrack>()
.HasIndex("TrackNumber", "AlbumId")
.IsUnique();