0

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

public class Repository<T>{

public IQueryable<T> GetAll(){

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

}

尽管我在底层数据库表中有数据映射到 entity 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?有没有办法覆盖这种行为?

4

1 回答 1

0

LINQ 实现是 Criteria API 的包装,此问题已被报告并标记为“无法修复”。Fabio Maulo 的评论表明,验证类是否已映射对性能影响太大。

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

于 2012-12-19T19:33:33.150 回答