2011-03-10 15 views
0

ドメインモデルには、他のいくつかのエンティティから使用される1つのエンティティCustomPropertyがあります。1つのエンティティをFluent Nhibernateオートマッピング規則を使用して複数のDBテーブルにマップする方法

Product 
{ 
    int Id; 
    Collection<CustomProperty> CustomProperties; 
} 

Order 
{ 
    int Id; 
    Collection<CustomProperty> CustomProperties; 
} 

しかし、DBに、私はProductテーブルへのNULL可能外部キーとOrderに別のNULL可能外部キーが含まれているだけで一つのテーブルCustomPropertyを望んでいません。代わりに、私は2つの別々のテーブルProductCustomPropertyOrderCustomPropertyが必要です。

私はオートマッピングと慣習でそれを行う必要があります。誰にもアイデアはありますか?

Btw、私は私のためにはうまくいかない考えがありました。たぶん誰もが手掛かりがなぜいます

public class CustomPropertyConvention : IHasManyConvention, IHasManyConventionAcceptance 
    { 
     public void Apply(IOneToManyCollectionInstance instance) 
     { 
       instance.Table("ProductCustomProperty"); 
     } 

     public void Accept(IAcceptanceCriteria<IOneToManyCollectionInspector> criteria) 
     { 
       criteria.Expect(i => i.Relationship.Class.Name == "CustomProperty" && i.Relationship.EntityType == typeof(Product)); 
     } 
    } 

この例では、完璧に働いている必要がありますが、IOneToManyCollectionInstance.Table()は何も設定しません。

答えて

0

one-to-manyリレーションシップはテーブルを無視します。これは、FK列が多側エンティティに入るためです。

別の言い方をすると、1つのCustomPropertyエンティティを2つの異なるテーブルにマップすることはできません(意味をなさない)。

many-to-manyマッピングを使用するか、またはCustomPropertyをエンティティではなく複合型としてマップできます。

関連する問題