私のモデルでは、エンティティキーの型としてbigint(ulong)を使用しています。私はデータベースに参照整合性を強制したいので、persistenceEnforceをtrueに設定しました。外部キーの列はNULL可能です。参照整合性では、外部キーがそのエンティティを参照していない場合にのみエンティティを削除することができるので、エンティティを削除する前に、この関連エンティティの各外部キーを最初にnullに設定する必要があります。しかし、私は外部キーをクリアする方法を知らない。ここでエンティティ・キーのタイプがbigint(ulong)の場合、外部キーをnullに設定する方法はありますか。
は私のモデルである:ここでは
<cf:entity name="Order" cfom:bindingList="false">
<cf:property name="Id" typeName="ulong" key="true" persistenceIdentity="true" cfps:hint="CLUSTERED" />
<cf:property name="Invoice" typeName="Invoice" persistenceEnforce="true" />
</cf:entity>
<cf:entity name="Invoice" cfom:bindingList="false">
<cf:property name="Id" typeName="ulong" key="true" persistenceIdentity="true" cfps:hint="CLUSTERED" />
<cf:property name="Name" typeName="string" />
</cf:entity>
は私のコードです:
Invoice invoice = new Invoice();
invoice.Save();
Order order = new Order();
order.Invoice = invoice;
order.Save();
// We must clear the reference to the invoice before deleting the invoice,
// because the database enforces referential integrity.
order.InvoiceId = 0;
order.Save();
invoice.Delete();
二度目の注文を保存するときに上記のコードは次の例外がスローされます。 と競合UPDATEステートメントFOREIGN KEY制約\ "FK_Ord_Ore_Inv_Inv \"です。
これは、CodeFluentによって生成されたコードがnullの代わりに値0を「Order_Invoice_Id」列に挿入するためです。 Order.BaseSaveメソッドの次の行は間違っているようです: persistence.AddParameter( "@ Order_Invoice_Id"、this.InvoiceId、((ulong)(0ul)));
私はインボイスのプロパティでpersistenceDefaultValue = "null"とusePersistenceDefaultValue = "true"の設定を試しましたが、問題は解決しませんでした。