1

私の問題は、私は親クラスを持っており、各親クラスBのリストがあります。 には、例えば、テーブルは以下のとおりです。タイプ/アイテムを持つ多くのクラスに1つのクラスをマップします

画像

id 
type 
item 
filename 

コンピュータ

id 
owner 
age 

労働者

id 
name 
age 

我々はすべてのコンピュータと労働者のために多くの画像を持っています。コンピュータと労働者のクラスでは、我々は画像のリストを持っています。コンピュータ用のイメージ項目は次のとおりです。労働者のための

id=auto generate 
type=1 
item= id of computer 

画像項目は以下のとおりです。

id=auto generate 
type=2 
item=id of worker 

クラスは次のようになります。 コンピュータ: -id -age -owner -images 労働者: -id -age -name -画像

画像について

は、私は必要なのですかわからいけないが、そのような何か: -id -filename (オプション、それがマッピングによって、必要に応じて) 型 -item

いくつかのアイデアどのようにマッピングするためにそれ?

+0

はNHibernateのであらゆるタイプのマッピングhttp://ayende.com/blog/3966/nhibernate-mapping-any – Anand

答えて

1
class ComputerMap : ClassMap<Computer> 
{ 
    public ComputerMap() 
    { 
     HasMany(x => x.Images) 
      .Where("type = 1") 
      .KeyColumn("item") 
      .Inverse() 
      .Cascade.All(); 
    } 
} 

class WorkerMap : ClassMap<Worker> 
{ 
    public WorkerMap() 
    { 
     HasMany(x => x.Images) 
      .Where("type = 2") 
      .KeyColumn("item") 
      .Inverse() 
      .Cascade.All(); 
    } 
} 

class ImageMap : ClassMap<Image> 
{ 
    public WorkerMap() 
    { 
     ReferencesAny(x => x.Item) 
      .EntityIdentifierColumn("item") 
      .EntityTypeColumn("type") 
      .AddMetaValue<Computer>(1) 
      .AddMetaValue<Worker>(2) 
      .IdentityType<int>();  <-- maybe optional 
    } 
} 

// in Computer and Worker have this 
public void AddImage(Image image) 
{ 
    this.Images.Add(image); 
    image.Item = this 
} 
+0

を試してみてくださいしかし、これは問題です。最初の段階で 私はデータベースに画像を追加し、その後、画像のIDによって、私は作業者に画像を追加し、dbに作業者を挿入します。 イメージ(db内)は更新しません。 – akalter

+0

okこれでカスケードが必要です。アップデートを参照してください。私はまたここに元気な逆を追加しました – Firo

+0

これは動作していないが、今私はそれがタイプではないことを私はメッセージを送った。 作業者が画像を更新していますが、タイプが間違っています。 タイプが1の場合、またメタ値が1に等しくない場合もあります。 – akalter

関連する問題