0

考虑这些 POCO:

class Foo {
  int Id {get;set;}
  string Name {get;set;}
}

class Bar {
  int Id {get;set;}
  string PropA {get;set;}
  Foo PropB {get;set;} 
}

现在我想要实现的是使用ISQLQuery具有根实体的Bar来水合 PropB 属性。

ISQLQuery barsAround = nhSes.CreateSQLQuery("select b.Id, b.PropA, {????} from Bar b inner join Foo f on f.Id = b.FK_FooId");
barsAround.SetResultTransformer(Transformers.AliasToBean<Bar>());
IList<Bar> results = barsAround.List<Bar>();

{????} 中的哪里是获取 b.Id 和 b.Name 并水合实体 Bar 的属性 PropB 的片段。

我不能使用ISQLQuery.AddEntity(),因为这会导致托管实体,我不能使用托管实体。获取的条形图是条形图的版本,因此每行的相同 Id 会杀死 NHibernate 引擎。

4

1 回答 1

2

您可以编写自己的临时转换器。不难,看源码 AliasToBeanResultTransformer

一个更好的选择是编写一个真正反映您的数据库和域的对象模型。如果 Bar 有多个版本,则版本号(或用于识别它的任何内容)应该是密钥的一部分。

这样你就可以摆脱所有的黑客攻击。

于 2010-07-23T16:05:20.943 回答