1

2 つの具象エンティティ タイプと抽象ベース タイプを同じデータベース テーブルにマップしようとしています。

テーブルには、NULL を受け入れないビット列が含まれています。列にはデフォルト値 ((0)) があります。

2 つの具体的なエンティティ タイプ (つまり、具体的なタイプ 1) のうちの 1 つだけが、列の値を使用する必要があります (もう 1 つの (つまり、具体的なタイプ 2) の場合は、常に false です)。

その列にマップされたプロパティを、それを必要とするエンティティ タイプにのみ追加しようとしました。

SaveChanges を呼び出すと、UpdateException が発生し、最も内側の例外に次のメッセージが表示され
ます。

EDMX の SSDL セクションを既に編集して変更しました。

<Property Name="MY_BIT_COLUMN" Type="bit" Nullable="false" />

に:

<Property Name="MY_BIT_COLUMN" Type="bit" Nullable="false" DefaultValue="false" />

(この変更がなければマッピングに失敗しました - 実行されません)

この列にマップされたプロパティを 2 番目の具体的なエンティティ型に追加したり、基本型に移動したりせずに、これを回避する方法はありますか?

具体的なタイプ 2 に保護されたプロパティを追加することはできますが、より洗練された回避策をお勧めします。

4

1 に答える 1

1

回避策が機能しない場合(少し驚いていますが、今すぐテストするのは遅いです)、他の回避策は、継承をTPHからTPTまたはTPCに変更することだけです。問題は明らかに、TPHでは派生型のすべての列がNULL可能である必要があることです。

他の回避策は、親エンティティの列メンバーを作成し、派生エンティティでカスタムコンストラクターを使用することです。これにより、常にfalseに設定されます。

最後の回避策は、列をnull許容にし、最初のエンティティのビジネスロジックで検証を実施することです。

于 2011-05-03T22:38:31.730 に答える