我正在研究 ASP.Net Core 2.1 API,我使用 Entity Framework Core 2.1。我正在使用遷移來(lái)管理對(duì)數(shù)據(jù)庫(kù)的更改。我的后備數(shù)據(jù)存儲(chǔ)是 Azure SQL Server 的一個(gè)實(shí)例。我需要將多字段非聚集索引添加到我的一個(gè)表中,但我很難在我的 google 搜索中找到有關(guān)如何執(zhí)行此操作的簡(jiǎn)明參考。我嘗試在 POCO 類中使用 [Index()] 數(shù)據(jù)注釋,但無(wú)法識(shí)別。因此,我假設(shè)我必須在 DbContext 類的 OnModelCreating 方法中執(zhí)行此操作,但我還沒(méi)有找到有關(guān)如何為多字段非聚集索引執(zhí)行此操作的示例。這是一個(gè)示例實(shí)體類public class H1Record : EntityBase{ [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public long Id { get; set; } [ForeignKey("ShippingServicesFileId")] public ShippingServicesFile ShippingServicesFile { get; set; } [Required] public int ShippingServicesFileId { get; set; } [Column(TypeName = "varchar(20)")] public string BatchId { get; set; } [Column(TypeName = "varchar(34)")] [MaxLength(34)] public string ElectronicFileNumber { get; set; } [Column(TypeName = "varchar(1)")] [MaxLength(1)] public string ElectronicFileType { get; set; } [Column(TypeName = "varchar(8)")] [MaxLength(8)] public string DateOfMailing { get; set; } [Column(TypeName = "varchar(6)")] [MaxLength(6)] public string TimeOfMailing { get; set; } public DateTime MailingDateTime { get; set; } [Column(TypeName = "varchar(1)")] [MaxLength(1)] public string EntryFacilityType { get; set; } [Column(TypeName = "varchar(5)")] [MaxLength(5)] public string EntryFacilityZipCode { get; set; }}這是實(shí)體基類public class EntityBase{ public DateTime CreatedDate { get; set; } public DateTime LastModifiedDate { get; set; } public int CreatedByUserId { get; set; } public int LastModifiedByUserId { get; set; } public bool DeleteFlag { get; set; }}我想在我的 DbContext 的 OnModelCreating 方法中為 ShippingServicesFileId 和 DeleteFlag 創(chuàng)建一個(gè)非聚集索引,當(dāng)我在我的包管理器控制臺(tái)中運(yùn)行 add-migration 時(shí),它會(huì)被拾取。有任何想法嗎?
2 回答

開(kāi)滿天機(jī)
TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊
您不能在具有數(shù)據(jù)注釋的多個(gè)列上創(chuàng)建索引,因此您必須使用 Fluent API(在 OnModelCreating 中):
modeBuilder.Entity<ENTITYCLASS>().HasIndex(x => new {x.PROPERTY1, x.PROPERTY2, ...})
創(chuàng)建非聚集索引。使用 .IsUnique() 創(chuàng)建一個(gè)唯一的。如果您想在 SQL Server 上使用聚集索引,請(qǐng)使用 .ForSqlServerIsClustered()。您可以選擇使用 .HasName("...") 為其指定另一個(gè)名稱。

侃侃爾雅
TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超16個(gè)贊
如果這是您的首選方法,您可以在遷移期間將列作為字符串?dāng)?shù)組傳入。例如
migrationBuilder.CreateIndex("IX_H1Record", "H1Record",new string[] { "ShippingServicesFileId", "DeleteFlag"}, "dbo");
- 2 回答
- 0 關(guān)注
- 233 瀏覽
添加回答
舉報(bào)
0/150
提交
取消