例如,我有几个表:
- 产品{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 ,它只会查询必要的列,但无论如何。我们开始吧:
- 将ManufacturerName属性添加到Product类
将该新属性的映射行添加到您的 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/