2011-07-13 21 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

相关问题