2012-06-27 84 views
3

我在嘗試獲取多對多關係來保存NHibernate中的連接記錄時使用Automapper在Fluent NHibernate中存在問題。Fluent NHibernate多對多不保存

在S.O上還有不少關於這個的帖子,但到目前爲止,他們都沒有解決過這個問題,想知道我是否在做某些不同的事情。

我有應用程序設置爲映射,當我手動創建數據庫中的連接記錄時,我確實獲取數據,因此在讀取級別上它正確映射,但它不會持續關係。

下面是相關的映射。我使用默認約定的automapper,但最終嘗試基於另一個SO帖子。

.Mappings(m => { 
         m.AutoMappings.Add(AutoMap.AssemblyOf<User>); 
         m.AutoMappings.Add(AutoMap.AssemblyOf<PostalCode>); 
         m.AutoMappings.Add(
           AutoMap.AssemblyOf<VPA>() 
            .Override<VPA>(v => 
             v.HasManyToMany(x => x.PostalCodes) 
              .Table("PostalCodesToVPAs") 
              .ParentKeyColumn("PostalCode_Id") 
              .ChildKeyColumn("VPA_Id") 
              .Cascade.SaveUpdate()) 
            .Override<PostalCode>(p => 
             p.HasManyToMany(x => x.VPAs) 
              .Table("PostalCodesToVPAs") 
              .ParentKeyColumn("VPA_Id") 
              .ChildKeyColumn("PostalCode_Id") 
              .Cascade.SaveUpdate().Inverse()) 
          ); 
        }) 

我真的保存看起來像這樣。這可能是矯枉過正,因爲我明確地保存了郵政編碼和vpa,但我讀了很多有關映射中反轉線問題的人,所以我想嘗試兩種方法。它沒有工作。

var postalCode = new PostalCode {Value ="90210", CreatedBy = 0, CreationDate = DateTime.Now, ModifiedBy = 0, ModifiedDate = DateTime.Now}; 
vpa.PostalCodes.Add(postalCode); 
postalCode.VPAs.Add(vpa); 
PostalCodeService.Save(postalCode); 
VPAService.Save(vpa); 

封面上service.save調用做下

return (int)Session.Save(obj); 

有沒有人看到這一點,知道爲什麼它不會保存記錄的加盟?

回答

4

找出解決方案,想要更新以防萬一遇到同樣的問題。

您必須將保存調用包裝在事務中,或者它不提交連接記錄。我最終修改了服務代碼以讀取

using (var tx = Session.BeginTransaction()) { 
    Session.Save(obj) 
    tx.commit(); 
    return obj.Id; 
}