子类和连接子类的 NHibernate 映射

标签 nhibernate nhibernate-mapping

在我正在进行的项目中,我有以下实体:分析师客户承包商。每个都继承自基类 User

public abstract class User {
    public virtual int Id { get; set; }
    public virtual string Username { get; set; }
    public virtual string FullName { get; set; }
}

然后我让其他类从基类继承为:

public class Analyst : User {
    // Empty class. There are no additional properties for an analyst.
}

public class Client : User {
    // Empty class. There are no additional properties for a client.
}

public class Contractor : User {
    public int TotalJobs { get; set; }
    public int JobsInProgress { get; set; }
}

对于上面的类,我有如下的表结构:

USER
----
UserId
Username
FullName
UserType (1 = Analyst, 2 = Client, 3 = Contractor)


CONTRACTOR
----------
UserId
TotalJobs
JobsInProgress

没有用于 Analyst 和 Client 类的表。

我想知道如何为 Contractor 类编写 NHibernate 映射文件。对于其他类,我创建了一个 User 映射文件并将 Client 和 Analyst 添加为子类。如何映射 Contractor 类?

最佳答案

这非常适合 8.1.4. Mixing table per class hierarchy with table per subclass 中描述的方法

<subclass name="Contractor" discriminator-value=3>
  <join table="CONTRACTOR">
    <key column="UserId"/>
    <property name="TotalJobs"/>
    <property name="JobsInProgress"/>
  </join>
</subclass>

关于子类和连接子类的 NHibernate 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2667439/

相关文章:

NHibernate:如何从 session 缓存中获取实体实例?

Nhibernate C# - 仅返回字符串属性不为 null 或空的对象

inheritance - 使用 NHibernate 从数据库填充大树时的表每个子类策略

nhibernate - NHibernate 映射文件中的 hbm 代表什么?

sql - 如何将 NHibernate 实体映射到查询

c# - NHibernate 尝试为 View 创建索引

.net - 哪些大型DB相关项目不适合使用NHibernate来完成?

nhibernate - Nhibernate 映射文件中的硬编码值

c# - Nhibernate - 如何使用 CompositeId 设计域对象和映射

NHibernate:没有主键的多对一