join - Fluent NHibernate - 将属性映射到连接表上的列

标签 join fluent-nhibernate

例如,我有几个表:

  • 产品{Id、名称、制造商 ID、...}
  • 制造商{ID、名称、...}

我希望能够在我的产品对象中包含ManufacturerName(而不是当我只需要名称时必须加载整个制造商行)。我的 ProductMap 看起来像...

Table("Product");
Id(x => x.Id, "Id");
Map(x => x.ProductName, "ProductName");
Map(x => x.ManufacturerId, "ManufacturerId");
References(x => x.Manufacturer, "ManufacturerId");

我需要添加什么来填充我的 Product 对象上的ManufacturerName 属性?我相信我需要进行某种 Join() 调用,但我无法弄清楚如何使用所有相关参数来编写它。它需要在 Product.ManufacturerId =Manufacturer.Id 上将当前表(Product)连接到Manufacturer表,并获取Manufacturer.Name列,填充对象上的ManufacturerName属性。

最佳答案

我认为您可以使用公式来动态检索制造商名称。这不是一个优雅的解决方案,我个人更喜欢使用映射到新实体(例如 ProductExtra 等)的单独 sql View ,它只会查询必要的列,但无论如何。我们开始吧:

  1. 将ManufacturerName属性添加到Product类
  2. 将该新属性的映射行添加到您的 ProductMap:

    Table("Product");
    Id(x => x.Id, "Id");
    Map(x => x.ProductName, "ProductName");
    Map(x => x.ManufacturerId, "ManufacturerId");
    Map(x => x.ManufacturerName).Formula("(select m.ManufacturerName from Manufacturer m where m.Id = ManufacturerId)");
    
    References(x => x.Manufacturer, "ManufacturerId");
    

希望这有帮助。

关于join - Fluent NHibernate - 将属性映射到连接表上的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5188108/

相关文章:

mysql - 使用数据透视表连接 2 个表

fluent-nhibernate - NHibernate 映射空对象/特例模式

sql - 流畅的 NHibernate : SchemaExport and SchemaUpdate

c# - 流利的 Nhibernate : Query to retrieve distinct values

SQL 学校作业,编写一个返回的 SELECT

mysql - MySQL 中的 JOIN 查询产生错误的结果

nhibernate - 如何从FluentNHibernate生成hbm.xml文件

c# - NHibernate.断言失败 : null identifier

mysql - 合并表和查询

MySQL - 使用 LIMIT 有效地将两个 select 语句组合成一个结果