2011-12-25 45 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(); 

我剝離出來的東西像工作單位,我沒有表現出什麼是虛擬機,因爲我不認爲這是必要的,因爲他們只是屬性。這應該讓你知道我在做什麼。

映射總是讓我困惑。我從來不知道我需要使用inversecascade.SaveUpdate()

我目前的設置我得到這個錯誤

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 

所以想是我把一個參考表A的獎金對象。有沒有這樣做?或者不管做什麼都必須做。因爲它在TableA對象中,所以我可以跳過它,它可以從中找出它。將TableA放入已經在表A中的獎金似乎有點毫無意義。

回答

0

您已創建雙向鏈接,但您的對象創建尚未處理。只需將tableA屬性分配給獎金,事情應該開始保存...

+0

那麼這就是我想知道是否有可能不必將TableA分配給獎金,但我想它不是。 – chobo2 2011-12-25 19:19:27

+0

啊,好吧,沒有。 Nhibernate是一個對象關係映射器。如果將對象圖保存爲與模型不同步將會很奇怪。 – Hace 2011-12-25 20:14:51