Ich versuche, einen nicht eindeutigen geclusterten Index für eine der Spalten hinzuzufügen, die von einem zusammengesetzten Schlüssel in einer Tabelle verwendet werden, die EF Code First verwendet. Bisher habe ich folgende Modelle. Beachten Sie das IX_PackageTargetPackageId
Index-Attribut für die PackageTarget.PackageId
Eigenschaft Ich versuche, hinzuzufügen:Entity Framework-Code Zuerst Clustered-Indizes und zusammengesetzte Schlüssel
public class Package
{
[Key]
public int Id { get; set; }
[Required]
[Index("IX_PackageName", IsUnique = true)]
public string Name { get; set; }
}
public class Target
{
[Key]
public int Id { get; set; }
[Required]
public string Value { get; set; }
}
public class PackageTarget
{
[Key]
[Column(Order = 0)]
[Index("IX_PackageTargetPackageId", IsClustered = true)]
public int PackageId { get; set; }
[Key]
[Column(Order = 1)]
public int TargetId { get; set; }
[ForeignKey("PackageId")]
public virtual Package Package { get; set; }
[ForeignKey("TargetId")]
public virtual Target Target { get; set; }
}
Ich habe die folgende Migration, die für mich automatisch generiert wurde:
CreateTable(
"dbo.PackageTargets",
c => new
{
PackageId = c.Int(nullable: false),
TargetId = c.Int(nullable: false),
})
.PrimaryKey(t => new { t.PackageId, t.TargetId })
.ForeignKey("dbo.Packages", t => t.PackageId, cascadeDelete: true)
.ForeignKey("dbo.Targets", t => t.TargetId, cascadeDelete: true)
.Index(t => t.PackageId, clustered: true, name: "IX_PackageTargetPackageId")
.Index(t => t.TargetId);
CreateTable(
"dbo.Packages",
c => new
{
Id = c.Int(nullable: false, identity: true),
Name = c.String(nullable: false)
})
.PrimaryKey(t => t.Id)
.Index(t => t.Name, unique: true, name: "IX_PackageName");
CreateTable(
"dbo.Targets",
c => new
{
Id = c.Int(nullable: false, identity: true),
Value = c.String(nullable: false)
})
.PrimaryKey(t => t.Id);
Die einzige Änderung Ich habe die Migration gemacht Fügen Sie clustered: false
zu dem Primärschlüssel PackageTargets
hinzu, da ich möchte, dass der IX_PackageTargetPackageId
Index stattdessen gruppiert wird.
Nach der obigen Änderung, bin ich immer noch nicht in der Lage, die Migration laufen wie die folgende Ausnahme auftritt:
Cannot create more than one clustered index on table 'dbo.PackageTargets'.
Drop the existing clustered index 'PK_dbo.PackageTargets' before creating another.
Aus meiner Migration, ich sind nicht andere gruppierte Indizes vorhanden sehen können. Fehle ich etwas?