我正在使用 NHibernate 与 Burrow 和 Fluent 将数据从 SQLServer2005 传送到一个充满 FoxPro 7 dbf 的目录中。
当我尝试通过 Burrow 的 GenericDAO 保存新记录时,我得到一个异常,归结为“字段 XXX 不接受空值”,其中字段 XXX 是一个 NOT NULL 字段,它根本没有被映射,因为它不重要并且应留空。
我之前在直接使用 ADO.Net 和 OleDbConnection 时遇到过这个问题,发现在连接字符串中添加“;NULL=OFF”可以解决问题。
我已经在连接字符串中尝试了“NULL=OFF”、“NULL=NO”以及提供者的“VFPOLEDB”和“VFPOLEDB.1”。它仍然尝试自动将 NULL 插入“INSERT (field1, field2, ...) VALUES (?, ?, ? ...)”语句中缺少的字段(即,我没有映射的那些字段)。
有任何想法吗?
这是我对 FoxPro 表的流利配置:
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();
映射类,这些被插入的实际表有几十个未映射的字段,所有字段都不是空的,它们在新记录上都应该是空白的:
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");
}
}