使用JetDriver isn';通过NHibernate为FoxPro表格的插入关闭自动空值;行不通

使用JetDriver isn';通过NHibernate为FoxPro表格的插入关闭自动空值;行不通,nhibernate,fluent-nhibernate,null,oledb,foxpro,Nhibernate,Fluent Nhibernate,Null,Oledb,Foxpro,我正在使用NHibernate和Burrow以及Fluent将数据从SQLServer2005传输到一个满是Foxpro7DBF的目录中 当我试图通过Burrow的GenericDAO保存一条新记录时,我得到一个异常,可以归结为“字段XXX不接受空值”,其中字段XXX是一个非空字段,它根本没有被映射,因为它不重要,将保留为空 我以前在直接使用ADO.Net和OleDbConnection时遇到过这个问题,发现在连接字符串中添加“NULL=OFF”解决了这个问题 我在连接字符串中尝试了“NULL=

我正在使用NHibernate和Burrow以及Fluent将数据从SQLServer2005传输到一个满是Foxpro7DBF的目录中

当我试图通过Burrow的GenericDAO保存一条新记录时,我得到一个异常,可以归结为“字段XXX不接受空值”,其中字段XXX是一个非空字段,它根本没有被映射,因为它不重要,将保留为空

我以前在直接使用ADO.Net和OleDbConnection时遇到过这个问题,发现在连接字符串中添加“NULL=OFF”解决了这个问题

我在连接字符串中尝试了“NULL=OFF”、“NULL=NO”以及在提供程序中尝试了“VFPOLEDB”和“VFPOLEDB.1”。它仍然会尝试自动将空值插入“insert(field1,field2,…)VALUES(?,,?…)语句中缺少的字段(即我没有映射的字段)

有什么想法吗

以下是我对FoxPro表格的fluent配置:

string connString = "Provider=VFPOLEDB.1;Data Source="
  + @"D:\Documents\Work\Projects\OurProjects\Clients\Client1\Testing\Data"
  + ";NULL=NO;";

Fluently.Configure(nhCfg)
  .Database(JetDriverConfiguration.Standard.ConnectionString(connString)
  .Dialect<GenericDialect>().Driver<OleDbDriver>())
  .Mappings(m => m.FluentMappings.AddFromAssembly(
    Assembly.Load("OurProduct.Model, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null")))
  .BuildConfiguration();
string connString=“Provider=VFPOLEDB.1;数据源=”
+@“D:\Documents\Work\Projects\OurProjects\Client1\Testing\Data”
+“空=否;”;
流利。配置(nhCfg)
.Database(JetDriverConfiguration.Standard.ConnectionString(connString)
.dialogue().Driver())
.Mappings(m=>m.FluentMappings.AddFromAssembly(
Load(“OurProduct.Model,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”))
.BuildConfiguration();
映射类,即插入到其中的实际表,有几十个未映射字段,所有字段都不为空,并且在新记录上都应为空:

    public class ClientMap : ClassMap<Client>
    {
        public ClientMap() {
            Id(x => x.PersonId).GeneratedBy.Assigned();
            Map(x => x.LastName).Length(15);
            Map(x => x.FirstName).Length(15);
            Map(x => x.MiddleName).Column("midname").Length(1);
            Map(x => x.Address1).Length(40);
            Map(x => x.Address2).Length(40);
            Map(x => x.City).Length(20);
            Map(x => x.State).Length(2);
            Map(x => x.ZipCode).Length(9);
            Map(x => x.Gender).Length(30);
            Map(x => x.Ethnicity).Length(30);
            Map(x => x.MaritalStatus).Column("marital").Length(30);
            Map(x => x.LivingArrangement).Column("livarrange").Length(30);
            Map(x => x.PovertyLevel).Column("povlevel").Length(30);
            Map(x => x.BirthDate);
            Map(x => x.AssessmentNotes).Column("assnotes");
        }
    }
公共类ClientMap:ClassMap
{
公共客户端映射(){
Id(x=>x.PersonId).GeneratedBy.Assigned();
Map(x=>x.LastName).Length(15);
Map(x=>x.FirstName).Length(15);
映射(x=>x.MiddleName)。列(“MiddleName”)。长度(1);
Map(x=>x.Address1)。长度(40);
映射(x=>x.Address2)。长度(40);
地图(x=>x.City)。长度(20);
映射(x=>x.State)。长度(2);
Map(x=>x.ZipCode);
地图(x=>x.Gender)。长度(30);
地图(x=>x.1)。长度(30);
映射(x=>x.MaritalStatus)。列(“婚姻”)。长度(30);
映射(x=>x.livingarrange)。列(“livingarrange”)。长度(30);
映射(x=>x.PovertyLevel)。列(“povlevel”)。长度(30);
Map(x=>x.出生日期);
Map(x=>x.AssessmentNotes).列(“assnotes”);
}
}

执行以下操作似乎可以解决问题,但我认为需要为每个新的工作单元执行(BurrowFramework初始化)

OLE-DB属性相当于SET NULL

        var sess = bf.GetSession(typeof(Client));

        var dbCmd = sess.Connection.CreateCommand();

        dbCmd.CommandType = System.Data.CommandType.Text;
        dbCmd.CommandText = "SET NULL OFF";

        sess.Transaction.Enlist(dbCmd);


        dbCmd.ExecuteNonQuery();