Nhibernate在mono下的一些异常 Argument cannot be null

几日前又将一个asp.net的旧项目搬迁至linux下,该项目是基于asp.net 4.0 + Nhibernate + FluentNhibernate实现的,在迁移的过程中碰到一个少见的问题,爬了很多文,包括中文,英文,最后在某日文网站(靠google翻译)上找到答案,可谓相当蛋疼,特些记录

先介绍下,要迁移至的环境是centos6.5 + MONO + Jexus

该情况发生在Nhibernate + mono下,但不是一定会发生,原先我移迁的几个项目里,也有一些是采用Nhibernate的,就没发生这样的问题

初始: 

迁移发现如下错误

Nhibernate在mono下的一些异常 Argument cannot be null_第1张图片

于是,老老实实进web.config修改配置

发现修改后,还是这样的问题,有些苦恼了,仔细追踪,发现下面有提示是Nhibernate OpenSession时出错,看来问题出在这上面

Nhibernate在mono下的一些异常 Argument cannot be null_第2张图片

Unhandled Exception: System.ArgumentNullException: Argument cannot be null.  
Parameter name: type  
  at System.Activator.CheckType (System.Type type) [0x00000]  
  at System.Activator.CreateInstance (System.Type type, Boolean nonPublic) [0x00000]  
  at NHibernate.AdoNet.SqlClientSqlCommandSet..ctor () [0x00000]  
  at NHibernate.AdoNet.SqlClientBatchingBatcher..ctor (NHibernate.AdoNet.ConnectionManager connectionManager, IInterceptor interceptor) [0x00000] 

  

这时候试了很多方法,包括重写了一些nhibernate的调用方法,爬了很多文,一直没有找到解决方案,直到最后从某个角落找到了一个解释,抛出该错误的原因还有解释出来,只是翻译看得太累...

发生该错误的原因原来是:

NHibernate.AdoNet.SqlClientSqlCommandSet

[Test]
        public void Test()
        {
            Assembly sysData = Assembly.Load("System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
            var sqlCmdSetType = sysData.GetType("System.Data.SqlClient.SqlCommandSet");
            Assert.IsTrue(sqlCmdSetType != null, "Could not find SqlCommandSet!");
        }

用以上测试,找不到SqlCommandSet....

似乎是由于平台的原因造成

目前解决办法

nhibernate:

配置 

name="adonet.batch_size">0  

 

FluentNhibernate:

return Fluently.Configure()
                    .Database(
                  FluentNHibernate.Cfg.Db.MsSqlConfiguration.MsSql2008
                  .ConnectionString(s => s.Server("YourServer").Database("YourDB").Username("username").Password("userpwd")).AdoNetBatchSize(0))
                .Mappings(m => m.FluentMappings
                .AddFromAssemblyOf()
                ).BuildSessionFactory();

  即添加.AdoNetBatchSize(0)

 

至此问题解决,以上以作记录,也希望能帮遇到同样问题的人少走一些弯路!

参考URL:
https://github.com/codesharp/infrastructure/issues/15
http://sta-blockhead.blogspot.com/2009/06/systemdatasqlclientsqlcommandset.html

 

转载于:https://www.cnblogs.com/vingi/articles/4392507.html

你可能感兴趣的:(Nhibernate在mono下的一些异常 Argument cannot be null)