Я пытаюсь сопоставить устаревшую базу данных с моделью Entity Framework. База данных очень универсальна, и большинство данных хранится в таблицах «Объект» и «Событие». Столбцы имеют такие названия, как «Date1», «Num11», «Text4». В базе данных нет явных внешних ключей.
Вот подмножество двух таблиц:
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 я могу создавать отдельные Entities для каждого типа объекта и соответствующим образом переименовывать столбцы. Проблемы начинаются, когда я пытаюсь создать свойства навигации между объектами, поскольку тип столбца внешнего ключа не всегда соответствует первичному ключу.
Ни SQL Server, ни Entity Framework не позволят мне создать ссылку внешнего ключа между столбцами.
Как я могу создать свойства навигации между объектами, если типы данных FK an и PK не совпадают в точности? Что-то, что позволяет мне включить связанный объект в запрос LINQ и, надеюсь, предоставить его в службе OData.
Я не могу вносить какие-либо изменения в существующие таблицы в базе данных, но при необходимости могу добавить представления. Хотя мне нужно будет сохранить объекты обратно в базу данных.