0

私は以下のような実体を持っています

public abstract class MyBaseClass
{
    public int Id { get; set; }
}

public class MyConcrete : MyBaseClass
{
    public int TemplateName { get; set; }
    public int Total { get; set; }
}

public class MyOtherConcrete : MyBaseClass
{
    public int TemplateName { get; set; }
    public int MyProperty { get; set; }
    public string OtherProperty { get; set; }
}

デフォルトの初期化を使用して、EFは次のような列を持つテーブルを作成します。

Id
TemplateName
TemplateName1 // <-- this is the problem
Total
MyPorperty
MyOtherProperty

ここで、EFを構成して、派生クラスのすべてのTemplateNameプロパティが、別の列を作成せずにTemplateName列に自動的にマップされるようにする方法について質問します。メソッドで構成することは可能OnModelCreatingですか?

編集

実際、上記は私の問題の単純化されたバージョンでした。さらに10個のエンティティがあり、一部のプロパティがどこにでも複製される可能性があり、抽象化レイヤーを追加したくありません。

列を手動でマップしようとしましたOnModelCreatingが、「タイプ内の各プロパティ名は一意である必要があります。プロパティ名'TemplateName'はすでに定義されています」例外はありますか?

編集2

だから、ここで見つけたのですが、EFでは上記のようなことは不可能だと言っていましたが、私にとっては奇妙です。

4

2 に答える 2

4

この問題を回避するには、TemplateNameをMyBaseClassに移動します。

必要に応じて、中間基本クラスを使用して、クラスのサブセットのみが共有するプロパティを保持できます。

于 2012-09-11T05:51:59.713 に答える
0

ネットを検索した後、これまでのところそれは不可能でした。継承ツリーが間違っていることに気付いたので。

したがって、私の場合、EF要件に一致するようにコードを変更する必要があります。これは奇妙に聞こえます。多くの場合、ENTITYは変更する必要がないため、通常、複数のプロジェクトで使用されるエンティティを作成します。エンティティが間違っていることがわかった場合、他のプロジェクトで大幅な変更が必要になるため、更新しません。

これまでのところ、私の質問に対する正確な答えはないと思います。EFがサポートした後すぐに更新します。

于 2012-10-03T07:01:28.630 に答える