【问题标题】:Fluent Nhibernate mapping a property from another tableFluent Nhibernate 从另一个表映射一个属性
【发布时间】:2009-04-21 23:10:12
【问题描述】:

我在将表 A 中的列映射到主要映射到表 B 的类的属性时遇到问题。下面更好地解释了这一点:

有一个类 CustomerRisk,它具有属性 Risk 和 CustomerNumber。

在数据库中,这包含两个表:Customer,它有一个 CustomerNumber 列,以及 CustomerRisk,它有一个 Customer 的外键和一个 Risk。

映射风险并不难,但映射 CustomerNumber 是个问题。是否可以在不创建客户类*的情况下做到这一点?这样 NHibernate 就可以加入 Customer 类来选择 CustomerNumber:

select cn.CustomerNumber, r.Description
from CustomerRisk cr
    inner join Customer c on c.CustomerID = cr.CustomerID
    inner join Risk r on r.RiskID = cr.RiskID

当然,多个 CustomerRisk 记录可以具有相同的 CustomerID。

希望这有点清楚,非常感谢。

  • 我知道您通常需要一个客户课程,但我已经“匿名化”了这些课程。

【问题讨论】:

  • 我们通过为 Customer 表创建一个类来解决这个问题,但将 Customer 属性隐藏在 CustomerRisk 中(内部,因此 Fluent NH 仍然可以通过 AssemblyInfo 中的 InternalsVisibleTo 访问它)。然后,CustomerRisk.CustomerNumber 属性只返回其内部 Customer 属性的 CustomerNumber 属性。

标签: nhibernate fluent-nhibernate


【解决方案1】:

使用 NHibernate 时要记住的一点是,它处理实体并且只知道您告诉它的内容(通过映射文件)。 HQL 是 SQL 的面向对象版本,因此您不能使用它来访问不属于映射域模型的字段。

您仍然可以通过 NHibernate 会话执行普通的旧 SQL,这实际上是访问您尚未映射到 ORM 中的数据的唯一方法。可能有一个轻量级的映射解决方案(虽然我不能说没有看到你的数据模型),但如果你反对完全映射“客户”,我认为 SQL 是你最好的选择。

【讨论】:

  • 我们已经改变了它,所以现在我们正在映射我们的客户对象。
猜你喜欢
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 2010-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多