nhibernate:为什么nhibernate更新我的子实体的外键?

nhibernate:为什么nhibernate更新我的子实体的外键?,nhibernate,profiling,Nhibernate,Profiling,好的,我有两个名为WorkPostSheet和WorkPost的实体,其中WorkPostSheet包含WorkPost项的集合: public class WorkPostSheet { ... public virtual IEnumerable<WorkPost> WorkPosts { get; private set; } } 输出: NHibernate:在“用户”(用户名、姓氏、姓氏)中插入值(@p0、

好的,我有两个名为WorkPostSheet和WorkPost的实体,其中WorkPostSheet包含WorkPost项的集合:

public class WorkPostSheet
{
    ...

    public virtual IEnumerable<WorkPost> WorkPosts
    {
        get;
        private set;
    }
}
输出:

NHibernate:在“用户”(用户名、姓氏、姓氏)中插入值(@p0、@p1、@p2);选择最后一个插入行ID()@p0='min',@p1='Marius',@p2='Ingjer'

这很有意义,因为我正在创建一个用户(TestData.CreateAndCommitUser)

NHibernate:将值(@p0、@p1、@p2)插入“工作项”(LastChanged、Description、Id)@p0=06.01.2010 21:50:25,@p1='A',@p2=0

这很有意义,因为我正在创建一个工作项

NHibernate:将值(@p0、@p1、@p2)插入到“WorkPostSheet”(PeriodFrom、PeriodTo、userId)中;选择最后一个插入行ID()@p0=01.01.2000 00:00:00,@p1=01.02.2000 00:00:00,@p2=1

这在我创建一个工作表时很有意义

NHibernate:将值(@p0、@p1、@p2)插入“工作岗位”(workOne、workItemId、sheetId);选择最后一个插入行ID()@p0=0、@p1=0、@p2=1

这在WorkPostRepository中提交(workpost工作表是根实体)

NHibernate:更新“工作岗位”集合sheetId=@p0,其中Id=@p1@p0=1,@p1=1

现在这个我不明白了。当实体首次提交时,将使用指定的相同值更新外部实体。你能帮我理解吗

NHibernate:选择workpostsh0\uu0.Id作为Id3\u 1\u0,workpostsh0\u0.PeriodFrom作为PeriodFrom3\u 1\u0,workpostsh0\u0.PeriodTo作为PeriodTo3\u 1\u0,user1\u0.Id作为Id0\u0,user1\u0.UserName作为UserName0\u0,user1\u0.FirstName作为FirstName0\u0\u0,user1\u0.LastName作为LastName0\u0\u0从“工作表”加入工作表workpostsh0.userId=user1.Id,其中workpostsh0.Id=@p0@p0=1

从存储库加载

NHibernate:选择workposts0_uu0.sheetId作为sheetId2_0,workposts0_0.Id作为Id2_0,workposts0_0.WorkOne作为Worktone2_1_0,workposts0.workItemId作为workItemId2_1_0,workposts0_0.sheetId作为sheetId2_0,workitem1.Id作为Id1_0,workitem1.Id作为Id1_0,workitem1workposts0_uu内部连接workposts0_u上的“WorkItem”workitem1_uu.workItemId=workitem1_u.Id,其中workposts0_uu.sheetId=@p0@p0=1

惰性负载

以下是映射文件:

sealed class WorkPostClassMap : ClassMap<WorkPost>
{
    public WorkPostClassMap()
    {
        Not.LazyLoad();

        Id(post => post.Id).GeneratedBy.Identity().UnsavedValue(0);
        Map(post => post.WorkDone);
        References(post => post.Item).Column("workItemId").Not.Nullable();
        References(Reveal.Property<WorkPost, WorkPostSheet>("Owner"), "sheetId").Not.Nullable();
    }
}

sealed class WorkPostSheetClassMap : ClassMap<WorkPostSheet>
{
    public WorkPostSheetClassMap()
    {
        Id(sheet => sheet.Id).GeneratedBy.Identity().UnsavedValue(0);
        Component(sheet => sheet.Period, period =>
                                             {
                                                 period.Map(p => p.From, "PeriodFrom");
                                                 period.Map(p => p.To, "PeriodTo");
                                             });
        References(sheet => sheet.Owner, "userId").Not.Nullable();
        HasMany(sheet => sheet.WorkPosts).KeyColumn("sheetId").AsBag();
    }
}
密封类WorkPostClassMap:ClassMap
{
公共WorkPostClassMap()
{
不是。懒汉();
Id(post=>post.Id).GeneratedBy.Identity().UnsavedValue(0);
Map(post=>post.WorkDone);
引用(post=>post.Item).Column(“workItemId”).Not.Nullable();
引用(leaver.Property(“Owner”),“sheetId”).Not.Nullable();
}
}
密封类WorkPostSheetClassMap:ClassMap
{
公共WorkPostSheetClassMap()
{
Id(sheet=>sheet.Id).GeneratedBy.Identity().UnsavedValue(0);
组件(工作表=>sheet.Period,Period=>
{
period.Map(p=>p.From,“PeriodFrom”);
period.Map(p=>p.To,“PeriodTo”);
});
引用(sheet=>sheet.Owner,“userId”).Not.Nullable();
HasMany(sheet=>sheet.workpost).KeyColumn(“sheetId”).AsBag();
}
}
您是否将关联的集合端的“反向”属性设置为“true”

请参阅:

您是否将关联的集合端的“反向”属性设置为“true”


请参阅:

您可以发布映射文件吗?映射看起来如何?您可以发布映射文件吗?映射看起来如何?
sealed class WorkPostClassMap : ClassMap<WorkPost>
{
    public WorkPostClassMap()
    {
        Not.LazyLoad();

        Id(post => post.Id).GeneratedBy.Identity().UnsavedValue(0);
        Map(post => post.WorkDone);
        References(post => post.Item).Column("workItemId").Not.Nullable();
        References(Reveal.Property<WorkPost, WorkPostSheet>("Owner"), "sheetId").Not.Nullable();
    }
}

sealed class WorkPostSheetClassMap : ClassMap<WorkPostSheet>
{
    public WorkPostSheetClassMap()
    {
        Id(sheet => sheet.Id).GeneratedBy.Identity().UnsavedValue(0);
        Component(sheet => sheet.Period, period =>
                                             {
                                                 period.Map(p => p.From, "PeriodFrom");
                                                 period.Map(p => p.To, "PeriodTo");
                                             });
        References(sheet => sheet.Owner, "userId").Not.Nullable();
        HasMany(sheet => sheet.WorkPosts).KeyColumn("sheetId").AsBag();
    }
}