1

不適切に設計されたデータベースのエンティティ フレームワーク モデルを作成する必要があります。データベースはタイプごとの継承を使用しますが、PK->PK 関係ではなく、PK->FK 関係を使用してこれを行います。例えば

Person
   PersonID (PK)
   Name

Employee
   EmployeeID (PK)
   PersonID (FK)
   DateStarted

HourlyEmployee
   HourlyEmployeeID (PK)
   EmployeeID (FK)
   HourlyRate

明らかにこれは設計が悪いだけですが、変更することはできません。エンティティ フレームワークのタイプごとのテーブル継承では、基本的に EmployeeID が存在しないようにし、Employee の PK を PersonID にする必要があります。このデータベースのモデルを作成することは可能ですか、それとも別のツールを選択する必要がありますか? 推奨事項はありますか?

4

2 に答える 2

0

データベースが存在する場合は、データベースからモデルを作成できますが、期待どおりにならない場合があります。EF は、奇妙なデータベース構造ではうまく機能しないことがあります。

于 2012-07-17T18:14:59.137 に答える
0

データベースは EF をごまかすことができないように構成されているため、これを TPT 継承としてマップしません。

Employee.EmployeeIDがデータベースで自動生成され、一意である場合Employee.PersonID(データベースで一意性を強制する必要があります)、単にマッピングするだけで EF をごまかすことができるはずです (テストされていません)。

public Employee : Person {
    public DateTime DateStarted { get; set; }
}

このクラスはEmployee、Person () からキーを継承することを EF に通知し、EFPersonIDから実際のキーを非表示にします。これは、実際のキーが自動生成されている場合に機能するはずです。

問題は、このパターンを破る次のレベルの継承です。これを機能HourlyEmployeeさせるには、参照する必要がありますPersonID- ではありませんEmployeeID。EF は存在を認識していないEmployeeIDため、 との関係をマップすることさえできませんHourlyEmployee

コードでの TPT 継承には、最初にもう 1 つの制限があります。PK 列は、すべてのテーブルで同じ名前でなければなりません。

于 2012-07-17T18:30:35.253 に答える