2011-12-25 3 views
0

マップをセットアップする方法を混乱させるので、物事を保存し、すべてを参照する必要はありません。私のコードでnhibernateで保存するには?

public class TableAMapping : ClassMap<TableA> 
    { 
     public TableAMapping() 
     { 
      Id(x => x.Id).GeneratedBy.GuidComb(); 
      Map(x => x.Name).Not.Nullable().NvarcharWithMaxSize(); ; 

      References(x => x.Country).Not.Nullable(); 
      HasMany(x => x.Bonuses).Cascade.All(); 
      HasManyToMany(x => x.AvailableFeatures).Cascade.All(); 
     } 
    } 

public class BonusMapping : ClassMap<Bonus> 
    { 
     public BonusMapping() 
     { 
      Id(x => x.Id).GeneratedBy.GuidComb(); 


      Map(x => x.Amount).Not.Nullable().Precision(10).Scale(2); 

      References(x => x.BonusType).Not.Nullable(); 
      References(x => x.TableA).Not.Nullable(); 

     } 
    } 

     public class AvailableFeatureMapping : ClassMap<AvailableFeature> 
    { 
     public AvailableFeatureMapping() 
     { 
      Id(x => x.Id).GeneratedBy.GuidComb(); 

      Map(x => x.Name).Not.Nullable().NvarcharWithMaxSize(); 

      HasManyToMany(x => x.TableAs); 

     } 
    } 

私はこの

TableA a = new TableA(); 
a.Name = "test"; 
a.Country = session.Load<Country>(1); 

foreach(var b in bonuesVm) 
{ 
    Bonus bonus = new Bonus(); 
    bonus.Amount = b.Amount; 
    bonus.BonusType = sesson.Load<BonusType>(b.bonusTypeId); 

    a.Bounus.add(bonus); 
} 

foreach(var avaliable in avaliableVm) 
{ 
    AvaliableFeatures features = new AvaliableFeatures(); 
    features.Name = avaliable.Name; 

    a.AvaliableFeatures.Add(features); 
} 

session.Save(a); 
transaction.Commit(); 

のようなものが、私は仕事の単位のようなものを取り除かないと私は、私はそれとして必要だとは思わないようVMであるものを示すわけではありません彼らはただの特性です。これはあなたに私が何をしているのかのアイデアを与えるはずです。

マッピングは常に私を混乱させます。だから、ボーナス対象にTableAのへの参照を置くために私ですたい

NHibernate.PropertyValueException was unhandled by user code 
    Message=not-null property references a null or transient value Framework.Domain.Bonus.TableA 
    Source=NHibernate 
    EntityName=.Framework.Domain.Bonus 
    PropertyName=TableA 

私は私の現在の設定で inverseまたは cascade.SaveUpdate()

を使用する必要がある場合、私はこのエラーを取得する私は確かに決して。これをやろうとしていませんか?それとも何があってもやらなければならないのですか?私はそれがそれからそれを理解することができるTableAオブジェクトにあるので、私はそれを飛び越しているだろう。すでにTableAに入っているボーナスにTableAを入れなければならないことはちょっと意味がないようです。

答えて

0

あなたは双方向リンクを作成しましたが、あなたのオブジェクト作成はまだそれを処理していません。ちょうどボーナスにtableAプロパティを割り当てると、物事は保存を開始する必要があります...

+0

まあそれはボーナスにTableAを割り当てる必要はありません可能性がありますが、私はそれがないと思います。 – chobo2

+0

ああ、まあ、まあ、まあまあ。 Nhibernateはオブジェクトリレーショナルマッパーです。モデルグラフと同期していないオブジェクトグラフを保存するのは奇妙です。 – Hace

関連する問題