Nhibernate セッションをラップする一般的な Repository クラスがあります。
public class Repository<T>{
public IQueryable<T> GetAll(){
return this.Session.Query<T>();
}
}
基になる DB テーブルにエンティティにマップされたデータがあったにもかかわらずFoo
、呼び出すとRepository.GetAll<Foo>()
空の列挙型が返されました。非常に驚いた後、問題は、クラス マッピングを SessionFactory にロードするのを忘れていたことであることがわかりました。
私は、NHibernate がマッピングを持たないエンティティ タイプを読み込もうとしたときに例外をスローしないことに腹を立てました。これはまさに、NH が早期に大声で失敗する原因となるようなシナリオのように感じます。
NH をブートストラップするコードは次のとおりです。マッピングをロードする 2 行がコメントアウトされていることに注意してください。
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 の構成を誤っていますか? この動作を無効にする方法はありますか?