0

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 の構成を誤っていますか? この動作を無効にする方法はありますか?

4

1 に答える 1

0

LINQ 実装は Criteria API のラッパーであり、この問題は報告され、「修正予定なし」とマークされています。Fabio Maulo からのコメントは、クラスがマップされていることを確認することで、パフォーマンスが大幅に低下したことを示しています。

これは私にとってもニュースであり、最初は LINQ の遅延実行によるものだと思いました。

于 2012-12-19T19:33:33.150 に答える