私のモデルでは、エンティティ キーの型として bigint (ulong) を使用しています。空のキーには値 0 を使用する必要があります。私のメソッドでは値 0 のみをチェックし、null をチェックしたくないため、外部キーの列は null 可能であってはなりません。他のエンティティによって参照されている関連エンティティの削除を除いて、すべて正常に機能します。
これが私のモデルです:
<cf:entity name="Customer" cfom:bindingList="false">
<!--persistenceIdentity is true, because the corresponding column for this property must be auto incremented by the database.-->
<cf:property name="Id" typeName="ulong" key="true" persistenceIdentity="true" cfps:hint="CLUSTERED" />
<cf:property name="Name" typeName="string" />
</cf:entity>
<cf:entity name="Order" cfom:bindingList="false">
<!--persistenceIdentity is true, because the corresponding column for this property must be auto incremented by the database.-->
<cf:property name="Id" typeName="ulong" key="true" persistenceIdentity="true" cfps:hint="CLUSTERED" />
<!--persistenceNullable is false, because the column for the foreign key must not be nullable.-->
<cf:property name="Customer" typeName="{0}.Customer" persistenceNullable="false" />
</cf:entity>
これが私のコードです:
Customer customer = new Customer();
customer.Save();
Order order = new Order();
order.Customer = customer;
order.Save();
customer.Delete();
最後のステートメントは次のエラーを返します。値 NULL を列 'Order_Customer_Id'、テーブル 'CodeFluentTest.dbo.Order' に挿入できません。列はヌルを許可しません。更新は失敗します。
これは、Customer_Delete ストアド プロシージャに次の更新ステートメントが含まれているためです。UPDATE [Order] SET [Order].[Order_Customer_Id] = NULL WHERE ([Order].[Order_Customer_Id] = @Customer_Id)
もちろん、Order_Customer_Id 列は NULL 可能ではないため、これは機能しません。Order_Customer_Id 列に NULL の代わりに値 0 を入れるように CodeFluent に指示するにはどうすればよいですか?