EFのコードファーストアプローチを使用して、テーブル内の複合キーで使用される列の1つにクラスター化されていないインデックスを追加しようとしています。これまでのところ、私は以下のモデルを持っています。私が追加しようとしていますPackageTarget.PackageId
性質上IX_PackageTargetPackageId
index属性に注意してください。Entity Frameworkコードファーストクラスタードインデックスとコンポジットキー
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; }
}
私は自動的に私のために生成された次の移行があります。移行に私が作った
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);
のみ改正をIX_PackageTargetPackageId
インデックスをクラスタリングする代わりに、PackageTargets
プライマリキーにclustered: false
を追加します。
上記の改正後、私はまだ次の例外が発生したとして移行を実行することができません:
Cannot create more than one clustered index on table 'dbo.PackageTargets'.
Drop the existing clustered index 'PK_dbo.PackageTargets' before creating another.
を私の移行から、私は他のクラスタ化インデックスが存在している見ることができません。何か不足していますか?