レガシ データベースを Entity Framework モデルにマップしようとしています。データベースは非常に汎用的で、ほとんどのデータはテーブル「オブジェクト」と「イベント」に保存されます。列には、「Date1」、「Num11」、「Text4」などの名前が付けられています。データベースに定義された明示的な外部キーはありません。
2 つのテーブルのサブセットを次に示します。
CREATE TABLE [Object] (
[ObjectId] int not null identity(1,1) primary key,
[ObjectTypeId] int,
[Name] varchar(100)
);
CREATE TABLE [Event] (
[EventId] int not null identity(1,1) primary key,
[EventTypeId] int,
[Subject] text,
[Body] text,
[Date1] datetime,
[Num11] decimal(18,2)
);
の一部の値でEventTypeID
は、Num11
フィールドは を参照しObject
ます。テーブル間の結合を簡単に作成できます。
SELECT
ev.[EventId], ev.[Subject], ev.[Body], ev.[Date1] AS [CreatedDate],
p.[ObjectId] AS [PersonId], p.[Name] AS [PersonName]
FROM [Event] ev
LEFT JOIN [Object] p ON p.ObjectId = ev.Num11
WHERE ev.[EventTypeId] = 7
AND ev.[Date1] > '2013-04-07'
Entity Framework デザイナーでは、オブジェクトの種類ごとに個別のエンティティを作成し、列の名前を適切に変更できます。外部キー列のタイプが主キーと常に一致するとは限らないため、エンティティ間にナビゲーション プロパティを作成しようとすると問題が発生します。
SQL Server も Entity Framework も、列間に外部キー参照を作成することを許可しません。
FK データ型と PK データ型が正確に一致しない場合、エンティティ間にナビゲーション プロパティを作成するにはどうすればよいですか? 関連するエンティティを LINQ クエリに含めることができ、うまくいけば OData サービスで公開できるようになります。
データベース内の既存のテーブルを変更することはできませんが、必要に応じてビューを追加できます。エンティティをデータベースに保存できるようにする必要がありますが。