1

私はEF5とCode-Firstを使用しています。

FooBaseという抽象基本クラスがあります。Foo1とFoo2はどちらもFooBaseから継承します。Barと呼ばれるDiscriminatorに基づくEFのマッピング構成を使用します。したがって、Bar = someValueの場合は、Foo1を作成します... BarがanotherValueの場合は、Foo2を作成します。

Barは弁別子であるため、どのFooクラスのプロパティとしてもアクセスできません。

Foo1のインスタンスをFoo2に変換する必要があります。リフレクションを使用して、Foo1のキー値を含むプロパティを新しいインスタンスに移動します。異なるタイプであることを除いて、これは完全に複製されています。EntityStateを変更してデータベースに保存します。

ただし、データベースの識別子の値は更新されていません。それでもFoo1であるかのように同じ値のままです。

エンティティは変更のみに設定されているため、EFはわざわざディスクリミネーターをチェックしないと推測できます。

誰かがこれを回避する方法を知っていますか?

4

1 に答える 1

2

既存のインスタンスを別のタイプに変更することはできません。キー値に関連付けられているエンティティのタイプは不変です。Foo1からFoo2を作成する場合は、新しいキー値を使用して新しいインスタンスを作成し、それをデータベースに挿入する必要があります。変更するだけで、常にキーとディスクリミネーターが保持されます。

タイプを真剣に変更してキーの継承を維持する必要がある場合は、解決策ではありません。キーは参照と同等であり、ディスクリミネーターは.NETでの入力と同等であると考えてください。既存の参照のタイプを変更することはできません。

于 2012-11-21T09:21:33.297 に答える