【发布时间】:2011-07-06 12:22:46
【问题描述】:
我有一个自加入员工实体类,其中包含与其自身相关的 id、name 和 ref 列。我想创建它的新实例并将其保存到数据库。
起初,我创建了一个 Employee 类的实例并将其命名为 manager。然后我用这些值从 Employee 表中获取了一条记录:Id = 1,Name = "A",RefId = null
并将这些值设置为管理器对象。之后我再次创建了一个 Employee 类的实例
并像这样设置它的属性值:
emp.Name = "B",emp.Ref = 经理。
最后我通过使用 base.Add(resource) 方法来坚持它。当时 Nhibernate 引发了以下错误:
“对象引用未保存的瞬态实例在刷新之前保存瞬态实例”。
这是映射文件内容:
<class name="Employee" table="Employee" schema="dbo" optimistic-lock="none" lazy="true">
<id name="Id" access="property" column="Id">
<generator class="identity" />
</id>
<property name="Name" type="String" column="Name" length="50" />
<property name="RefId" type="Int64" column="RefId" insert="false" update="false"/>
<many-to-one name="Ref" class="Employee" column="RefId" not-null="false" fetch="select" />
class>
请帮我解决这个错误。 谢谢
【问题讨论】:
-
为了清楚起见,你的意思是有一个对象是自引用的,还是说有两个员工对象,它们之间有引用? IE,是否有两条员工记录,它们之间有外键,或者有一条员工记录,外键指向主键。
-
另外,拥有员工实体的映射文件或代码会很有帮助。
-
感谢您的建议。我会尽量说清楚。我编辑了我的问题。有两个员工记录,它们之间有外键。
标签: c# nhibernate orm nhibernate-mapping