使用迁移的 CodeFirst 中的多个重叠索引
Multiple overlapping indexes in CodeFirst using migrations
我在获取 Add-Migration
创建正确的 migration.CreateIndex()
调用时遇到问题。我有一个这样的 POCO:
class MyPoco
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Index("IX_Test", 1)]
int PartitionId { get; set; }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
int LocalId { get; set; }
[Index("IX_Test", 2)]
int LocalId2 { get; set; }
}
由此 Add-Migration
生成 CreateIndex("dbo.MyPoco", "LocalId2", unique: true, name: "IX_Test");
。我期待 CreateIndex("dbo.MyPoco", new[] { "PartitionId", "LocalId2" }, unique: true, name: "IX_Test");
根本原因似乎是 EF 模型的每个属性只能有一个索引注释(customannotation:Index="{ Name: IX_Test, Order: 2, IsUnique: True }"
在生成的迁移 EDMX 中)。由于我不使用数据库生成的键,因此 EF 创建了一个 Intead,它似乎覆盖了我的索引。
有人知道如何使用 EF Code First 生成两个重叠索引并让 EF Migrations 生成正确的输出吗?
似乎是 EF 6.1.1 中的已知错误。外键约定存在覆盖现有索引注释的错误。
http://entityframework.codeplex.com/workitem/2382
通过转到 6.1.2 解决。
我在获取 Add-Migration
创建正确的 migration.CreateIndex()
调用时遇到问题。我有一个这样的 POCO:
class MyPoco
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[Index("IX_Test", 1)]
int PartitionId { get; set; }
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
int LocalId { get; set; }
[Index("IX_Test", 2)]
int LocalId2 { get; set; }
}
由此 Add-Migration
生成 CreateIndex("dbo.MyPoco", "LocalId2", unique: true, name: "IX_Test");
。我期待 CreateIndex("dbo.MyPoco", new[] { "PartitionId", "LocalId2" }, unique: true, name: "IX_Test");
根本原因似乎是 EF 模型的每个属性只能有一个索引注释(customannotation:Index="{ Name: IX_Test, Order: 2, IsUnique: True }"
在生成的迁移 EDMX 中)。由于我不使用数据库生成的键,因此 EF 创建了一个 Intead,它似乎覆盖了我的索引。
有人知道如何使用 EF Code First 生成两个重叠索引并让 EF Migrations 生成正确的输出吗?
似乎是 EF 6.1.1 中的已知错误。外键约定存在覆盖现有索引注释的错误。
http://entityframework.codeplex.com/workitem/2382
通过转到 6.1.2 解决。