流利的Nhibernate - HasMany - 未保存子对象

ini*_*iki 2 nhibernate fluent-nhibernate

我有一个ReportRequest对象定义为:

public class ReportRequest
{
    public virtual Int32? Id { get; set; }
    public virtual string Description { get; set; }
    public virtual IList<ReportClient> ReportClients{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

和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; }
}
Run Code Online (Sandbox Code Playgroud)

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");
    }
}
Run Code Online (Sandbox Code Playgroud)

ChildClient需要保存为ReportClient,但设置了ParentId.

尽管ReportRequest和ReportClients保存得很好,但我面临的问题是ReportClient.ChildClients没有被保存.

我甚至没有收到任何错误.

有任何想法吗?

Sly*_*Sly 7

您需要为ChildClients属性映射设置级联到save-update:

  HasMany<ReportClient>(x => x.ChildClients)
        .KeyColumn("ParentId")
        .KeyNullable()
        .AsBag()
        .Inverse()
        .Cascade.SaveUpdate()
        .ForeignKeyConstraintName("FK_ReportClient_ParentId");
Run Code Online (Sandbox Code Playgroud)