NHibernateとBurrowおよびFluentを使用して、SQLServer2005からFoxPro7dbfでいっぱいのディレクトリにデータをシャトルしています。
BurrowのGenericDAOを使用して新しいレコードを保存しようとすると、「フィールドXXXはnull値を受け入れません」という例外が発生します。ここで、フィールドXXXはNOT NULLフィールドであり、重要ではないため、まったくマップされていません。空白のままにします。
以前、ADO.NetとOleDbConnectionを直接使用しているときにこれに遭遇し、接続文字列に「; NULL=OFF」を追加すると問題が解決することがわかりました。
接続文字列に「NULL=OFF」、「NULL = NO」、プロバイダーに「VFPOLEDB」と「VFPOLEDB.1」を試してみました。それでも、「INSERT(field1、field2、...)VALUES(?、?、?...)」ステートメントから欠落しているフィールド(つまり、マップしなかったフィールド)にNULLを自動的に挿入しようとします。
何か案は?
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();
そして、マッピングクラス、これらが挿入されている実際のテーブルには、マッピングされていないフィールドが数十個あり、すべてNOT NULLであり、新しいレコードではすべて空白にする必要があります。
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");
}
}