2012-09-23 21 views
0

在中等信任環境中使用Unity +功能NHibernate NHibernate的+ 3.3.1.4團結+ NHibernate的3.3.1.4和中等信任錯誤

var session = sessionFactory.OpenSession(); 

這個錯誤:

Attempt by method 'NHibernate.AdoNet.SqlClientSqlCommandSet..ctor()' to access method 'System.Data.SqlClient.SqlCommandSet..ctor()' failed. 

    at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) 
    at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) 
    at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) 
    at System.Activator.CreateInstance(Type type, Boolean nonPublic) 
    at NHibernate.AdoNet.SqlClientSqlCommandSet..ctor() 
    at NHibernate.AdoNet.SqlClientBatchingBatcher.CreateConfiguredBatch() 
    at NHibernate.AdoNet.SqlClientBatchingBatcher..ctor(ConnectionManager connectionManager, IInterceptor interceptor) 
    at NHibernate.AdoNet.SqlClientBatchingBatcherFactory.CreateBatcher(ConnectionManager connectionManager, IInterceptor interceptor) 
    at NHibernate.AdoNet.ConnectionManager..ctor(ISessionImplementor session, IDbConnection suppliedConnection, ConnectionReleaseMode connectionReleaseMode, IInterceptor interceptor) 
    at NHibernate.Impl.SessionImpl..ctor(IDbConnection connection, SessionFactoryImpl factory, Boolean autoclose, Int64 timestamp, IInterceptor interceptor, EntityMode entityMode, Boolean flushBeforeCompletionEnabled, Boolean autoCloseSessionEnabled, ConnectionReleaseMode connectionReleaseMode) 
    at NHibernate.Impl.SessionFactoryImpl.OpenSession(IDbConnection connection, Boolean autoClose, Int64 timestamp, IInterceptor sessionLocalInterceptor) 
    at NHibernate.Impl.SessionFactoryImpl.OpenSession(IInterceptor sessionLocalInterceptor) 
    at NHibernate.Impl.SessionFactoryImpl.OpenSession() 
    at BsCms.Bootstrapper.<>c__DisplayClass5.<BuildUnityContainer>b__2(IUnityContainer c) 
    at Microsoft.Practices.Unity.InjectionFactory.<>c__DisplayClass2.<.ctor>b__0(IUnityContainer c, Type t, String s) 
    at Microsoft.Practices.ObjectBuilder2.FactoryDelegateBuildPlanPolicy.BuildUp(IBuilderContext context) 
    at Microsoft.Practices.ObjectBuilder2.BuildPlanStrategy.PreBuildUp(IBuilderContext context) 
    at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context) 

有人能幫助我嗎?

回答

0

這是一個很容易解決的問題。您必須禁用批處理。您可以通過設置屬性adonet.batch_size這樣做是爲了0

App.config/Web.confighibernate.cfg.xml或NHibernate的配置部分:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <reflection-optimizer use="false"/> 
    <session-factory> 
    <!-- other properties --> 
    <property name="adonet.batch_size">0</property> 
    </session-factory> 
</hibernate-configuration> 

或者通過FluentNHibernate:

var db = MsSqlConfiguration.MsSql2008 
    // other configurations 
    .AdoNetBatchSize(0); 

return Fluently.Configure() 
    // other configurations 
    .Database(db) 
    .BuildConfiguration();