Nhibernate 如何在单向一对多关系中重新设置家长

Nhibernate 如何在单向一对多关系中重新设置家长,nhibernate,fluent-nhibernate,nhibernate-mapping,fluent-nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,Fluent Nhibernate Mapping,如何在单向一对多关系中重新设置家长?我实际上是想让ParentA集合中的1个孩子移动到ParentB集合中 映射 public class Person_10 { public virtual int Id { get; set; } public virtual string FirstName { get; set; } public virtual IList<Dog_10>

如何在单向一对多关系中重新设置家长?我实际上是想让ParentA集合中的1个孩子移动到ParentB集合中

映射

        public class Person_10
        {
            public virtual int Id { get; set; }
            public virtual string FirstName { get; set; }
            public virtual IList<Dog_10> Dogs { get; set; }

            public Person_10()
            {

            }

        }
        
        public class Person_10Map : ClassMap<Person_10>
        {
            public Person_10Map()
            {
                Id(x => x.Id).GeneratedBy.Identity();

                Map(x => x.FirstName).Not.Nullable();
                // Have to set this or the lineitems wont get automatically persisted when the PersistenceSpecification
                // saves the order!
                HasMany(x => x.Dogs)
                    .Not
                    .KeyNullable() // important and work only if set together ( if i don't have this it wont update the foreign key column... for this unidirectional relationship..
                    .Not
                    .KeyUpdate() // to prevent double update.  Without this you get insert(cart) , insert(lineitem), insert(lineitem), update ( lineitem )
                    .Cascade.AllDeleteOrphan();
            }
        }

        public class Dog_10
        {
            public virtual int Id { get; set; }
            public virtual string Name { get; set; }

        }
        

        public class Dog_10Map : ClassMap<Dog_10>
        {
            public Dog_10Map()
            {
                Id(x => x.Id).GeneratedBy.Identity();

                Map(x => x.Name).Not.Nullable();

            }
        }
但是在第二个事务中,当试图将子对象移动到另一个父对象时,它没有执行我期望的更新语句,如下面的sql语句所示

-- statement #1
select TOP (1) reparentin0_.Id        as id1_21_,
               reparentin0_.FirstName as firstname2_21_
from   dbo.[Person_10] reparentin0_
where  reparentin0_.FirstName = 'Michael' /* @p0 */

-- statement #2
SELECT dogs0_.Person_10_id as person3_19_1_,
       dogs0_.Id           as id1_19_1_,
       dogs0_.Id           as id1_19_0_,
       dogs0_.Name         as name2_19_0_
FROM   dbo.[Dog_10] dogs0_
WHERE  dogs0_.Person_10_id = 1 /* @p0 */

-- statement #3
INSERT INTO dbo. [Person_10]
            (FirstName)
VALUES      ('Jennifer' /* @p0 - FirstName */);

--//////////////////////////////////////////////////

select SCOPE_IDENTITY()


                
                
            

尝试使用以下命令重新复制:
parentA.Dogs.Remove(dog);删除(狗);驱逐(狗);dog.ID=0;dog.Parent=parentB;parentB.Dogs.Add(dog)
-- statement #1
INSERT INTO dbo. [Person_10]
            (FirstName)
VALUES      ('Michael' /* @p0 - FirstName */);

--//////////////////////////////////////////////////

select SCOPE_IDENTITY()


-- statement #2
INSERT INTO dbo. [Dog_10]
            (Name,
             Person_10_id)
VALUES      ('Sheba' /* @p0 - Name */,
             1 /* @p1 - Person_10_id */);

--//////////////////////////////////////////////////

select SCOPE_IDENTITY()


-- statement #3
INSERT INTO dbo. [Dog_10]
            (Name,
             Person_10_id)
VALUES      ('Hercules' /* @p0 - Name */,
             1 /* @p1 - Person_10_id */);

--//////////////////////////////////////////////////

select SCOPE_IDENTITY()

-- statement #1
select TOP (1) reparentin0_.Id        as id1_21_,
               reparentin0_.FirstName as firstname2_21_
from   dbo.[Person_10] reparentin0_
where  reparentin0_.FirstName = 'Michael' /* @p0 */

-- statement #2
SELECT dogs0_.Person_10_id as person3_19_1_,
       dogs0_.Id           as id1_19_1_,
       dogs0_.Id           as id1_19_0_,
       dogs0_.Name         as name2_19_0_
FROM   dbo.[Dog_10] dogs0_
WHERE  dogs0_.Person_10_id = 1 /* @p0 */

-- statement #3
INSERT INTO dbo. [Person_10]
            (FirstName)
VALUES      ('Jennifer' /* @p0 - FirstName */);

--//////////////////////////////////////////////////

select SCOPE_IDENTITY()