4

私は EF5 Code First アプリケーションに取り組んでおり、これまでのところ順調に進んでいますが、問題が発生したため、誰かが解決策を提案してくれることを願っています。

基本的に、基本クラスといくつかの派生クラスがあり、それらのマッピングをどのように処理するのか疑問に思っています。ばかげて単純化された例を次に示します。

[Table("Person")]
public class Person
{
  public int PersonId { get; set; }
  public string Name { get; set; }
}

[Table("EmployeePerson")]
public class EmployeePerson : Person
{
  public int HoursWorked { get; set; }
}

[Table("CustomerPerson")]
public class CustomerPerson : Person
{
  public int DollarsSpent { get; set; }
}

これまでのところ、これは典型的な Table-per-Type シナリオですが、基本クラスが抽象ではないというヒッチを除きます。EFがそれを受け入れるのに苦労しています.IDでそのようなエンティティをロードしようとすると、EFによって生成された醜いクエリは行を返しません.PersonEmployeePersonCustomerPerson

誰かが以前にこのようなものを実装したことがありますか? TPT スタイルのマッピングでは、常に基本クラスが抽象である必要がありますか? 私は反対の例を見つけることができませんでしたが、実際の確認もありません. 必要に応じて使用できるいくつかの醜い回避策を考えることができますが、より洗練された解決策がある場合はそれを好みます。

(もう 1 つの問題: 私はサードパーティのデータベースに対して作業しているため、スキーマを変更することはできません。)

ありがとう!

4

1 に答える 1

3

あなたの「醜い」解決策が抽象基本クラスPersonBase(または同様のもの)を導入しPerson、空の派生クラスを作成することである場合、私のコメントは次のようになります。Person他の派生クラスに影響を与えることなく、後で変更する余地が残されているため、まったく醜いわけではありません。現在、それははるかに難しいでしょう。後で抽象クラスを導入する必要がありますが、これは既存のコードの大幅な変更です。

あなたの問題について: EF 5 (VS 2012 .Net 4.5) では再現できません。実際のモデルでは、さらに多くのことが行われている可能性があります。

于 2013-04-11T19:05:12.087 に答える