2011-07-13 23 views
2

我定義了一個的ReportRequest對象爲:功能NHibernate - 的hasMany - 子對象未保存

public class ReportRequest 
{ 
    public virtual Int32? Id { get; set; } 
    public virtual string Description { get; set; } 
    public virtual IList<ReportClient> ReportClients{get;set;} 
} 

和ReportClient被定義爲:

public class ReportClient 
{ 
    public virtual int? Id { get; set; } 

    public virtual long? ClientId { get; set; } 

    public virtual string Name { get; set; } 

    public virtual string EmailAddress { get; set; } 

    public virtual IList<ReportClient> ChildClients { get; set; } 
} 

映射ReportClient:

public class ReportClientMap : ClassMap<ReportClient> 
{ 
    public ReportClientMap() 
    { 
     Id(x => x.Id).UnsavedValue(null).GeneratedBy.Native(); 
     Map(x => x.ClientId); 
     Map(x => x.Name); 
     Map(x => x.EmailAddress).Length(255); 
     HasMany<ReportClient>(x => x.ChildClients) 
      .KeyColumn("ParentId") 
      .KeyNullable() 
      .AsBag() 
      .Inverse() 
      .ForeignKeyConstraintName("FK_ReportClient_ParentId"); 
    } 
} 

ChildClient需要保存爲ReportClient,但ParentId被設置。

雖然ReportRequest和ReportClient正在保存好,但我面臨的問題是ReportClient.ChildClients沒有被保存。

我什至沒有得到任何錯誤。

任何想法?

回答

7

您需要設置級聯保存,更新ChildClients屬性映射:

HasMany<ReportClient>(x => x.ChildClients) 
     .KeyColumn("ParentId") 
     .KeyNullable() 
     .AsBag() 
     .Inverse() 
     .Cascade.SaveUpdate() 
     .ForeignKeyConstraintName("FK_ReportClient_ParentId"); 
+0

謝謝!儘管子客戶端正在保存,但ParentId = NULL。我可以做些什麼改變來設置ParentId? – iniki

+0

爲了讓ParentId不爲null,我相信你需要在ReportClient上有一個Parent屬性,以便將它指向它的父級ReportClient。然後,確保在將父項添加到子集合時設置父項。 –

+0

刪除Inverse()來解決上述問題。 – iniki

相關問題