【问题标题】:Getting mapped entities from an ISQLQuery without AddEntity从没有 AddEntity 的 ISQLQuery 获取映射的实体
【发布时间】:2010-07-23 15:09:03
【问题描述】:

考虑这些 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;} 
}

现在我想要实现的是使用带有Bar 根实体的ISQLQuery 来水合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 引擎。

【问题讨论】:

    标签: c# nhibernate isql resulttransformer isqlquery


    【解决方案1】:

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

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

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

    【讨论】:

    • 不,正常的应用程序操作总是获取最新版本。对于特定部分(如审计),我想要一个具有给定 id 的特定实体的版本列表......我将研究一个自定义转换器,你有什么我可以研究的例子吗?
    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 2013-03-26
    • 2014-10-21
    • 2013-03-04
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    • 2019-07-26
    相关资源
    最近更新 更多