代码之家  ›  专栏  ›  技术社区  ›  Mike

使用DetachedCriteria返回非AR类型的泛型列表

  •  2
  • Mike  · 技术社区  · 16 年前

    我在摆弄我的存储库类,并试图用分离的条件执行查询。但是,它似乎不喜欢我将结果转换器设置为非AR类型。

    public class IncidentRepository
    {
        public static IList<AuditReport> GetAllIncidentsToAudit()
        {
            DetachedCriteria dc = DetachedCriteria.For<Incident>("i")
                .SetProjection(
                    Projections.ProjectionList()
                        .Add(Projections.Property("i.Id"), "IncidentId")
                        .Add(Projections.Property("l.Id"), "LocationId")
                )
                .CreateCriteria("Locations", "l")
                    .Add(Expression.Eq("l.PrimaryLocationFlag", "T"))
                .SetResultTransformer(Transformers.AliasToBean<AuditReport>());
    
            return ActiveRecordMediator<AuditReport>.FindAll(dc);
        }
    }
    
    public class AuditReport
    {
        public int IncidentId { get; set; }
        public int LocationId { get; set; }
    }
    

    执行此查询时出现的错误是:

    You have accessed an ActiveRecord class that wasn't properly initialized. There are two possible explanations: that the call to ActiveRecordStarter.Initialize() didn't include castle.AuditReport class, or that castle.AuditReport class is not decorated with the [ActiveRecord] attribute.
    

    我理解这个错误,但如何返回非AR类型的强类型列表?我看过NHibernate.Transform提供了什么,但没有什么突出的。

     ISession sess = ActiveRecordMediator.GetSessionFactoryHolder().
            CreateSession(typeof(ActiveRecordBase));
        ICriteria criteria = sess.CreateCriteria<Incident>("i")
            .SetProjection(
                Projections.ProjectionList()
                    .Add(Projections.Property("i.Id"), "IncidentId")
                    .Add(Projections.Property("l.Id"), "LocationId")
            )
            .CreateCriteria("Locations", "l")
                .Add(Expression.Eq("l.PrimaryLocationFlag", "T"))
            .SetResultTransformer(Transformers.AliasToBean<AuditReport>());
    
        return criteria.List<AuditReport>();
    

    1 回复  |  直到 16 年前
        1
  •  1
  •   jishi    16 年前

    如果您想将类用于转换结果,那么您可能需要将其“导入”到ActiveRecord。

    尝试用(或者AuditReport)装饰任何AR类,但它可能需要是AR装饰的类:

    [Import( typeof( AuditReport ), "AuditReport" )]
    

    这将转换为xml配置中的NHibernate import属性。

    select new OrderSummary(o.Foo, count(o.Foo)) 
        from Orders o 
        group by o.Bar
    
    推荐文章