2016-09-15 2 views
0

値オブジェクトのフィールドを使用して親にコンポジット主キーを作成するにはどうすればよいですか? 値オブジェクトはデータベースに独自のテーブルを持たないので、これらの2つの小道具を親テーブルに挿入します。Entity Framework - 値オブジェクトからコンポジットPKを作成

ie。

エンティティ親

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Parent>().Property(new { p.MyValueObj.Id, p.MyValueObj.SSN}).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 

    base.OnModelCreating(modelBuilder); 
} 

ため

public class Parent 
{ 
    public string Name { get;set; } 
    public MyValueObject MyValueObj { get;set; } 
} 

public class MyValueObject 
{ 
    public int Id { get;set; } 
    public int SSN { get;set; } 
} 

DbContext私は親テーブルは次のようになりたい:あなたはそれを継承を使用することができる場合

Composite PK 
----------- 
Id  SSN   Name 
1  000000  Mikael 
+0

あなたのモデルのコードを置くことができますか? – Sampath

+0

@Sampathモ​​デルを追加しました。 – Henrik

+0

なぜここに値オブジェクトが必要ですか? – Sampath

答えて

0

sh - Entity Frameworkのは、単にSQLフィールドに(プロパティとして設定されている)あなたの複雑なオブジェクトを変換することはできませんので、それはしようとします

public class Parent : MyValueObject 
{ 
    public string Name { get;set; } 
} 

public class MyValueObject 
{ 
    public int Id { get;set; } 
    public int SSN { get;set; } 
} 

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Parent>().Property(new { p.Id, p.SSN}).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 

    base.OnModelCreating(modelBuilder); 
} 

あなたの実装が動作しません理由は非常に単純です:このようになりウルドそれを他のテーブルの参照オブジェクトとして検索します。私が提供したコードでは、複雑なオブジェクトをプロパティとして持たないため、EFはすべてのプロパティをSQLカラムに簡単にマッピングします。

UPDATE 実は、私はいくつかのより多くの調査を行なったし、あなたが複雑な型を使用できることを示すarticleを見つけました。私は以前これを使ったことはありませんでしたので、この質問のすべてを記述することはできませんが、記事からわかるのは、この複雑なプロパティはオプションではないため、常に初期化する必要があるということです。また、私は仮定することができますが、あなたはこのような何かが必要ですので、おそらくあなたも、主キーとしてその複合型のすべてのフィールドをマークする必要はありません。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Parent>().Property(p => p.MyValueObj).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 

    base.OnModelCreating(modelBuilder); 
} 

ないことがうまくいくかどうかわからをちょうど、試してみてください:)

+0

複合オブジェクトを使用できず、何とか複合キーを作成できませんか?しかし、fkなし。 – Henrik

+0

私の答えを更新して、それを確認してください... –

関連する問題