2009-04-21 66 views
2

我有映射表A列的一类,它主要是映射到表B.下面的属性问题映射一个属性解释这更好:功能NHibernate从另一个表

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

在数据库中,它由两个表组成:Customer(客户)和CustomerRisk(CustomerRisk),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。

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

  • 我知道你通常需要一个客户类,但我已经'匿名'类。
+0

我们通过为Customer表创建一个类,但隐藏了CustomerRisk中的Customer属性(内部,所以Fluent NH仍然可以通过AssemblyInfo中的InternalsVisibleTo访问它)来解决它。 CustomerRisk.CustomerNumber属性然后仅返回其内部Customer属性的CustomerNumber属性。 – Peter 2009-04-21 14:42:54

回答

0

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

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

+0

我们改变了它,所以现在我们映射我们的Customer对象。 – Peter 2009-04-23 17:23:49