我有一个包含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?有没有办法覆盖这种行为?
答案 0 :(得分:0)
LINQ实现是Criteria API的包装,此问题has been reported标记为“无法修复”。 Fabio Maulo发表的评论表明,验证该类是否已被映射太过性能损失。
这对我来说也是新闻,我起初认为这是由于LINQ延期执行。