понедельник, 28 ноября 2011 г.

Entity Framework и проблемы со View

Как я уже говорил. сейчас активно используем Entity Framework. И сталкнулся с одной неожиданной проблемой при мапинге View из базы в модель.

Есть некая база данных, в которой создан, допустим такой View:
CREATE VIEW [dbo].[TestView]
AS
SELECT DateStart, DateEnd, PersonId
FROM dbo.Employees
WHERE (DateEnd IS NULL)
При попытке создать для него Entity получаем вот такую ошибку:
Message 1 The table/view 'PostList.dbo.TestView' does not have a primary key defined and no valid primary key could be inferred. This table/view has been excluded. To use the entity, you will need to review your schema, add the correct keys, and uncomment it.
В чем собственно проблема? В том, что Entity Franework не позволяет создавать сущности без первичного ключа. А на основе тех данных которые есть во View не может определить какое из полей хотя бы not null и может повыступать хоть заменителем первичного ключа.
Ларчик как всегда открывался просто. Достаточно одно из полей (в принципе любое, которое это позволяет сделать бизнес логика) сделать принудительно not null. Для этого скрипт создания должен иметь вид:
CREATE VIEW [dbo].[TestView]
AS
SELECT ISNULL(DateStart, GETDATE()) AS DateStart, DateEnd, PersonId
FROM dbo.Employees
WHERE (DateEnd IS NULL)
После чего сущность великолепно создается:
Собственно все.

Комментариев нет:

Отправить комментарий