Fluent Nhibernate从另一个表映射属性

Fluent Nhibernate从另一个表映射属性,nhibernate,fluent-nhibernate,Nhibernate,Fluent Nhibernate,我在将表a中的列映射到类的属性时遇到问题,该类主要映射到表B。下面更好地解释了这一点: 有一个类CustomerRisk,它具有属性Risk和CustomerNumber 在数据库中,它由两个表组成:Customer(具有CustomerNumber列)和CustomerRisk(具有Customer的外键)以及Risk 映射风险并不难,但映射客户编号才是问题所在。是否可以在不创建Customer类的情况下执行此操作*?以便NHibernate加入Customer类以选择CustomerNumb

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

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

在数据库中,它由两个表组成:Customer(具有CustomerNumber列)和CustomerRisk(具有Customer的外键)以及Risk

映射风险并不难,但映射客户编号才是问题所在。是否可以在不创建Customer类的情况下执行此操作*?以便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
当然,多个CustomerDisk记录可以具有相同的CustomerID

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

  • 我知道你通常需要一个客户类,但我已经“匿名”了

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


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

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


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

我们为表Customer创建了一个类,但将Customer属性隐藏在CustomerDisk中,从而解决了这个问题(内部,因此Fluent NH仍然可以通过AssemblyInfo中的InternalsVisibleTo访问它)。CustomerDisk.CustomerNumber属性然后只返回其内部Customer属性的CustomerNumber属性。我们通过为表Customer创建一个类,但在CustomerDisk中隐藏Customer属性来解决此问题(内部,因此Fluent NH仍然可以通过AssemblyInfo中的InternalsVisibleTo访问它)。CustomerRick.CustomerNumber属性然后只返回其内部Customer属性的CustomerNumber属性。我们已经更改了它,所以现在我们仍然映射我们的Customer对象。我们已经更改了它,所以现在我们仍然映射我们的Customer对象。