NHibernate:查询未映射的实体时的意外行为

时间:2012-12-19 18:58:58

标签: nhibernate exception

我有一个包含Nhibernate会话的通用Repository类:

public class Repository<T>{

public IQueryable<T> GetAll(){

    return this.Session.Query<T>();
}

}

尽管我将基础数据库表中的数据映射到实体Foo,但调用Repository.GetAll<Foo>()返回了一个空的可枚举数。经过多次惊愕,我发现问题是我忘记将我的类映射加载到SessionFactory中。

我很遗憾NHibernate在尝试加载没有映射的实体类型时不会抛出异常。感觉就像正是那种情况会导致NH早早失败

这是引导NH的代码。请注意,加载映射的两行已注释掉

 private static Configuration BuildNHibernateConfig(Action<IDbIntegrationConfigurationProperties> dbIntegration)
        {
            var configuration = new Configuration();

            configuration
                .Proxy(p => p.ProxyFactoryFactory<DefaultProxyFactoryFactory>())
                .DataBaseIntegration(db =>
                {

                    db.ConnectionString = connectionString.Value;
                    db.Dialect<MsSql2008Dialect>();

                })
                .AddAssembly(typeof(ActionConfirmation<>).Assembly)
                .SetProperty("show_sql", "true")

                .CurrentSessionContext<LazySessionContext>();

         //   var mappings = GetMappings();
         //   configuration.AddDeserializedMapping(mappings, "Hydra");

            return configuration;
        }

        private static HbmMapping GetMappings()
        {
            var mapper = new ModelMapper();
            mapper.AddMapping<FacilityMap>();
            return mapper.CompileMappingForAllExplicitlyAddedEntities();

        }

这是正常行为还是我有点错误配置NH?有没有办法覆盖这种行为?

1 个答案:

答案 0 :(得分:0)

LINQ实现是Criteria API的包装,此问题has been reported标记为“无法修复”。 Fabio Maulo发表的评论表明,验证该类是否已被映射太过性能损失。

这对我来说也是新闻,我起初认为这是由于LINQ延期执行。