C# 如何使用Entity Framework Core 2.1定义多字段索引
我正在开发ASP.NETCore2.1API,我使用的是实体框架Core2.1。我正在使用迁移来管理对数据库的更改。我的备份数据存储是Azure SQL Server的一个实例 我需要在我的一个表中添加一个多字段非聚集索引,但我很难在谷歌搜索中找到一个关于如何做到这一点的简明参考 我尝试在POCO类中使用[Index()]数据注释,但无法识别。因此,我假设我必须在DbContext类的OnModelCreating方法中执行此操作,但我还没有找到一个如何对多字段非聚集索引执行此操作的示例 下面是一个示例实体类C# 如何使用Entity Framework Core 2.1定义多字段索引,c#,sql-server,.net-core,entity-framework-core,asp.net-core-2.0,C#,Sql Server,.net Core,Entity Framework Core,Asp.net Core 2.0,我正在开发ASP.NETCore2.1API,我使用的是实体框架Core2.1。我正在使用迁移来管理对数据库的更改。我的备份数据存储是Azure SQL Server的一个实例 我需要在我的一个表中添加一个多字段非聚集索引,但我很难在谷歌搜索中找到一个关于如何做到这一点的简明参考 我尝试在POCO类中使用[Index()]数据注释,但无法识别。因此,我假设我必须在DbContext类的OnModelCreating方法中执行此操作,但我还没有找到一个如何对多字段非聚集索引执行此操作的示例 下面是
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; }
[Column(TypeName = "varchar(4)")]
[MaxLength(4)]
public string EntryFacilityZipPlus4 { get; set; }
[Column(TypeName = "varchar(2)")]
[MaxLength(2)]
public string DirectEntryOriginCountryCode { get; set; }
[Column(TypeName = "varchar(3)")]
[MaxLength(3)]
public string ShipmentFeeCode { get; set; }
[Column(TypeName = "varchar(6)")]
[MaxLength(6)]
public string ExtraFeeForShipment { get; set; }
[Column(TypeName = "varchar(2)")]
[MaxLength(2)]
public string ContainerizationIndicator { get; set; }
[Column(TypeName = "varchar(3)")]
[MaxLength(3)]
public string UspsElectronicFileVersionNumber { get; set; }
[Column(TypeName = "varchar(12)")]
[MaxLength(12)]
public string TransactionId { get; set; }
[Column(TypeName = "varchar(8)")]
[MaxLength(8)]
public string SoftwareVendorProductVersionNumber { get; set; }
[Column(TypeName = "varchar(9)")]
[MaxLength(9)]
public string FileRecordCount { get; set; }
[Column(TypeName = "varchar(9)")]
[MaxLength(9)]
public string MailerId { get; set; }
public ICollection<D1Record> D1Records { get; set; } = new List<D1Record>();
public ICollection<C1Record> C1Records { get; set; } = new List<C1Record>();
}
我想在DbContext的OnModelCreating方法中为ShippingServicesFileId和DeleteFlag创建一个非聚集索引,以便在Package Manager控制台中运行add migration时获取该索引
有什么想法吗?您不能在多个带有数据注释的列上创建索引,因此必须使用Fluent API(在OnModelCreating中):
modeBuilder.Entity().HasIndex(x=>new{x.PROPERTY1,x.PROPERTY2,…})
创建非聚集索引。使用.IsUnique()创建一个唯一的。如果需要SQL Server上的聚集索引,请使用.ForSqlServerIsClustered()。
或者,您可以使用.HasName(“…”)为其指定另一个名称。您不能在多个带有数据注释的列上创建索引,因此必须使用Fluent API(在OnModelCreating中):
modeBuilder.Entity().HasIndex(x=>new{x.PROPERTY1,x.PROPERTY2,…})
创建非聚集索引。使用.IsUnique()创建一个唯一的。如果需要SQL Server上的聚集索引,请使用.ForSqlServerIsClustered()。
或者,您可以使用.HasName(“…”)为其指定另一个名称。您可以在迁移过程中将列作为字符串数组传递,如果这是您的首选方法。例如
migrationBuilder.CreateIndex("IX_H1Record", "H1Record",new string[] { "ShippingServicesFileId", "DeleteFlag"}, "dbo");
如果是首选方法,则可以在迁移过程中以字符串数组的形式传入列。例如
migrationBuilder.CreateIndex("IX_H1Record", "H1Record",new string[] { "ShippingServicesFileId", "DeleteFlag"}, "dbo");
migrationBuilder.CreateIndex("IX_H1Record", "H1Record",new string[] { "ShippingServicesFileId", "DeleteFlag"}, "dbo");