私は、テーブル・コンクリート・タイプ(TPC)マッピングを備えたテーブル階層を持っています。 (Iわからない[キー列]属性は、それが動作するはずです必要はなくhttps://stackoverflow.com/a/19792915/959779に応じていること)EF6のコンポジット・キーによるコンポジット・タイプ(TPC)マッピングのテーブル
クラス構造:
public abstract class BaseEntity
{
[Key, Column(Order = 0)]
public int Id { get; set; }
}
public class Page: BaseEntity {
string Data { get; set; }
}
public class PageBackup: Page {
[Key, Column(Order = 1)]
public int PageId { get; set; }
public virtual Page Page { get; set; }
}
Page
とPageBackup
エンティティのId
がテーブルに追加した後(交差していますいくつかのアイテム)EFは、固有の主キーを持たなければならないのEntitySet 『EUICDataContext.Pages』に次のexcutionに
」すべてのオブジェクトを投げる。 をしかし、 'Entities.PageBackup'タイプのインスタンスと 'Entities.Page'タイプのインスタンスは、どちらも同じ主キー値 'EntitySet = Pages; Id = 6'を持ちます。
CREATE TABLE [dbo].[PageBackup]( [Id] [int] IDENTITY(1,1) NOT NULL, [PageId] [int] NOT NULL, [Data] [nvarchar](max) NULL, CONSTRAINT [PK_dbo.PageBackup] PRIMARY KEY CLUSTERED ( [Id] ASC )
はEFが可能です。「以下
エンティティマッピングコード:EFでPageMapping
が複合キーUpdate-Database
シードスクリプトは次のシグネチャを持つテーブルを作成有するが
class PageMapping : EntityTypeConfiguration<Page>
{
public PageMapping()
{
Map(m =>{ m.ToTable("Page"); });
HasKey(t => t.Id });
}
}
class PageBackupMapping : EntityTypeConfiguration<PageBackup>
{
public PageBackupMapping()
{
Map(m =>{
m.MapInheritedProperties();
m.ToTable("PageBackup");
});
HasKey(t => new { t.Id, t.PageId });
}
}
問題です複合キーを使用してテーブルを作成する(マッピングの例がたくさんあるが、移行については何も見つかりませんでした)
TPCマッピングの代わりにそのような設定を記述する方法は?
その他のソリューション提案が参考になります。