Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有一个确定的关系没有保存_C#_Nhibernate_Fluent - Fatal编程技术网

C# 有一个确定的关系没有保存

C# 有一个确定的关系没有保存,c#,nhibernate,fluent,C#,Nhibernate,Fluent,我在数据库中的两个表之间有一个标识关系 父表具有通过标识生成的主键。子表有一个主键,它是从父表生成的标识主键。这是真正的一对一 我尝试过几种映射策略,结果都不尽如人意 父映射文件有以下内容(请注意Cascade.All()-我希望父映射文件管理关系): 子映射具有以下功能: Id(Reveal.Member<ChildObject>("ID")) .GeneratedBy.Foreign("ParentObject"); HasOne(Reveal.Member<ChildOb

我在数据库中的两个表之间有一个标识关系

父表具有通过标识生成的主键。子表有一个主键,它是从父表生成的标识主键。这是真正的一对一

我尝试过几种映射策略,结果都不尽如人意

父映射文件有以下内容(请注意Cascade.All()-我希望父映射文件管理关系):

子映射具有以下功能:

Id(Reveal.Member<ChildObject>("ID"))
.GeneratedBy.Foreign("ParentObject");
HasOne(Reveal.Member<ChildObject, ParentObject>("ParentObject"))
.Constrained()
.ForeignKey();
我期望发生的事情是保存父级,并从数据库更新父级中的ID。然后在子对象中设置ID,并保存子对象

相反,保存的是父对象,而不是子对象(我可以看到insert语句nHibernate正在执行,并且子对象从未出现在数据库中)

孩子有来自父母的ID(它被正确地从父母传播到孩子),但nHibernate不承认孩子是脏的(我猜是这样)。即使我在子对象上显式地尝试SaveOrUpdate,它也不会被保存

但这有点奇怪。如果我将脏对象的集合附加到子对象,并在子对象上显式调用SaveOrUpdate,那么nhhibernate将持久化子对象,并且该集合是预期的行为。但我还是要明确地说


映射父子关系时我犯了什么错误?

我猜Parent.Id是由identity生成的


session.SaveOrUpdate(\u Parent)
将保存父级以获取其id,并缓存子级的插入以在提交时刷新<代码>会话.Clear()然后将删除缓存的Insert和
事务.Commit()
找不到任何事情可做。

我猜parent.Id是由identity生成的


session.SaveOrUpdate(\u Parent)
将保存父级以获取其id,并缓存子级的插入以在提交时刷新<代码>会话.Clear()然后将删除缓存的Insert和
事务.Commit()找不到任何事情可做。

谢谢,菲罗-这就是答案。我不明白为什么nHibernate会保存父对象,但在提交事务之前不会保存子对象。它几乎就像一个门面。我想这是一个性能优势。无论如何,谢谢你的回答。是的,它提高了性能,因为所有插入都是在一次往返中发送的,除了身份,NH必须发布插入才能获得IDThank,Firo-这就是答案。我不明白为什么nHibernate会保存父对象,但在提交事务之前不会保存子对象。它几乎就像一个门面。我想这是一个性能优势。无论如何,谢谢你的回答。是的,它提高了性能,因为所有插入都是在一个往返过程中发送的,除了标识之外,NH必须发出插入以获取id
Id(Reveal.Member<ChildObject>("ID"))
.GeneratedBy.Foreign("ParentObject");
HasOne(Reveal.Member<ChildObject, ParentObject>("ParentObject"))
.Constrained()
.ForeignKey();
session.SaveOrUpdate(_Parent);
session.Clear();
transaction.Commit();