2012-12-05 138 views
0

我有3類:流利NHibernate的一對一保存

public class WorkEntity 
{ 
    public virtual int WorkId { get; set; } 
    public virtual OrderExtensionEntity OrderExtension { get; set; } 
} 

public class OrderExtensionEntity 
{ 
    public virtual int Id { get; set; } 
    public virtual WorkEntity Work { get; set; } 
    public virtual IList<IssueInformation> Issues { get; set; } 
} 

public class IssueInformationEntity 
{ 
    public virtual int Id { get; set; } 
    public virtual long WorkId { get; set; } 
} 

它們被映射:

public class WorkMap : ClassMap<WorkEntity> 
{ 
    public WorkMap() 
    { 
     Id(x => x.WorkId).Column("ID_ZLECENIE").GeneratedBy.Sequence("SEQ_TAE_ZLECENIE"); 
     HasOne(x => x.OrderExtension).Constrained(); 
    } 
} 

public class OrderExtensionMap : ClassMap<OrderExtensionEntity> 
{ 
    public OrderExtensionMap() 
    { 
     LazyLoad(); 

     Id(x => x.Id).Column("ID_ZLECENIE").GeneratedBy.Foreign("Work"); 
     HasMany(x => x.IssueInformation).KeyColumn("FK_ZLECENIE"); 
    } 
} 

public class IssueInformationMap : ClassMap<IssueInformationEntity> 
{ 
    public IssueInformationMap() 
    { 
     Id(x => x.Id).Column("ID_ZAD_ROZ_ADRES").GeneratedBy.Sequence("SEQ_ZAD_ROZ_ADRES"); 

     Map(x => x.WorkId).Column("FK_ZLECENIE").Not.Nullable(); 
    } 
} 

當我的數據庫(Oracle)的上創建記錄我可以從表中的所有信息。如果我嘗試做

var orderExtension = new OrderExtension(); 
orderExtension._some_variables_like_strings_to_be_saved_ 

Session.SaveOrUpdate(orderExtension) 

它告訴我「未解決物業工作」和其他一些錯誤:: 但我不能救OrderExtensionEntity使用

orderExtension.Work = new WorkEntity() { WorkId = 12345 }; 

回答

0

試試這個映射。這就是我的一對一關係。

public class WorkMap : ClassMap<WorkEntity> 
{ 
    public WorkMap() 
    { 
     Id(x => x.WorkId).Column("ID_ZLECENIE").GeneratedBy.Sequence("SEQ_TAE_ZLECENIE"); 
     HasOne(x => x.OrderExtension) 
      .Cascade.All(); 
    } 
} 

public class OrderExtensionMap : ClassMap<OrderExtensionEntity> 
{ 
    public OrderExtensionMap() 
    { 
     LazyLoad(); 

     Id(x => x.Id).Column("ID_ZLECENIE").GeneratedBy.Foreign("Work"); 
     HasOne(x => x.Work).Constrained(); 
     HasMany(x => x.IssueInformation).KeyColumn("FK_ZLECENIE"); 
    } 
} 
+0

不是。它拋出「執行此方法調用的事務異步中止。」也許我從One-to-One變成One-To-Many並且像One一樣使用它? –

+0

嗯,我不確定我是否理解你的例子。它看起來像你試圖自己保存OrderExtension。沒有工作對象的情況下OrderExtension不能存在。如果這不是你的意圖,那麼映射是不正確的。我想你會將新的OrderExtension對象鏈接到新的Work對象或持久的Work對象並保存Work對象。 –

+0

此外,您在上面的「交易...」錯誤似乎不是一個映射相關的問題。 –