【发布时间】:2010-11-19 19:29:41
【问题描述】:
我在将多对一关系从抽象基类映射到具体联合子类时遇到问题。示例:
public abstract class Entity
{
public virtual Guid ID {get; set;}
public virtual string Name {get;set;}
public virtual User OwnerUser {get; set;}
}
public class User : Entity
{
public virtual string UserName {get; set;}
}
正如您在此处看到的,我的所有数据库对象都有一个基本抽象类。我将这些类与 Entity 类作为抽象映射类和 User 作为联合子类进行映射。创建配置对象时,不会引发任何错误,并且 Schema 导出也很好。但是, OwnerUser 的字段不会显示在所有具体类的数据库中。以下是映射外观的示例
<class entity-name="Entity" name="Entity" abstract="true">
<id name="ID" type="guid">
<generator class="guid.comb"/>
</id>
<property name="Name" />
<many-to-one name="OwnerUser" column="ID" entity-name="User" />
</class>
<union-subclass name="User" entity-name="User" extends="Entity">
<property name="UserName" />
</union-subclass>
我还使用 Oracle XE 实例作为数据库后端。如果这些信息不足以正确回答问题,请告诉我,我会尽我所能补充。
最坏的情况下,我将在所有具体对象上显式添加多对一关系,但这不是最优雅的解决方案,我认为我的建议应该可行。我无法在为各种互联网供电的管子上找到任何具体的例子,我也没有在文档中找到任何明确说明这是一个无效用例的内容,尽管我可能遗漏了一些东西。这不会是第一次:-/
非常感谢您对此问题的任何回答。感谢您的宝贵时间。
【问题讨论】:
标签: c# asp.net nhibernate