作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个像这样的实体:
public class Employee
{
public int ID { get; set; }
public IAccountManager AccountManager { get; set; }
...
}
我还为“DefaultAccountManager”定义了一个映射 - IAccountManager 的具体实现。映射上述“Employee”实体时,如何告诉 NHibernate 使用“DefaultAccountManager”中定义的映射来持久化/加载 AccountManager 属性?
编辑:实际上,如果我可以为 IAccountManager 设置一个映射,以便 NHibernate 可以推断加载/保留哪个实现者,那会更好。我宁愿不必通过强制所有实现者使用相同的映射来破坏多态性。
最佳答案
我确实找到了这个问题的答案。我对细节有点模糊,就像几个月前一样,但以下是解决方案的要点:
联合子类看起来像这样:
<class name="IAccountManager" abstract="true">
<id name="ID" column="ID" type="Int32">
<generator class="hilo"/>
</id>
<union-subclass name="DefaultAccountManager" table="DefaultAccountManager"
proxy="IAccountManager">
<property name="FirstName" type="String"/>
<property name="LastName" type="String"/>
</union-subclass>
... more implementations
</class>
注意联合子类上的属性“名称”。对于 IAccountManager 的每个实现,这应该是唯一的(并且匹配)。
此外,ID 不是每个表唯一的,而是所有 IAccountManagers 唯一的(通过利用 hilo)。
当 NHibernate 看到 IAccountManager 实体时,它将使用实例的具体类型和联合子类定义来找出正确的表。
希望这对您有所帮助!
关于c# - 流利的休眠状态 : How do I map an entity with a property who's type is an interface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/849664/
我是一名优秀的程序员,十分优秀!