Nhibernate 如何在单向一对多关系中重新设置家长
如何在单向一对多关系中重新设置家长?我实际上是想让ParentA集合中的1个孩子移动到ParentB集合中 映射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>
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()