2009-08-05 6 views
21

Я создал представление в моей базе данных, которое хотел бы включить в мою модель сущности. Однако, когда я пытаюсь обновить модель сущности через VS 2008, предупреждающее сообщение сообщает мне, что ТАБЛИЦА ИЛИ ПРОСМОТР, которые я пытаюсь добавить, не имеет первичного ключа.Представления и инфраструктура Entity

Похоже, что для того, чтобы добавить представление к модели, это должно иметь ключевое поле! Как я могу добавить это представление в свою модель, если представлениям не разрешено иметь ключевое поле, по крайней мере, в firebird, который я использую DBMRS.

Любая идея, как это решить?

+0

Это расширение Visual Studio, которое делает все это для вас, проверьте это сообщение: [Разочаровано отсутствием поддержки SQL-просмотров в ADO.NET Entity-Framework Designer?] (Http://blogs.microsoft. co.il/blogs/shimmy/archive/2010/09/03/frustrated-by-lack-of-support-for-sql-views-in-ado-net-entity-framework-designer.aspx) – Shimmy

+2

Это сообщение может быть полезным: [http://smehrozalam.wordpress.com/2009/08/12/entity-framework-creating-a-model-using-views-instead-of-tables/](http://smehrozalam.wordpress. com/2009/08/12/entity-framework-create-a-model-using-views-than-of-tables /) –

ответ

10

Там отличный ответ на этот вопрос здесь: Entity Framework and SQL Server View (см принятого ответа:. https://stackoverflow.com/a/2715299/53510)

EF выводит на ПК для представлений, объединяя все в ненулевом поле. Вы можете использовать ISNULL и NULLIF для управления нулевыми значениями столбцов представления, тем самым вынуждая EF выбрать требуемый ПК.

+4

Если вы используете ISNULL или NULLIF, это делает поля доступными только для чтения, и, таким образом, представление становится в основном для чтения. Это полезно только в некоторых ситуациях. –

+0

Не работает для меня в версии EF 5.0. – Dave

0

В представлениях firebird нет ключей. Вместо этого установите один (или более) поле «не равно нулю» с помощью следующей команды:

update RDB$RELATION_FIELDS set RDB$NULL_FLAG = 1 where (RDB$FIELD_NAME = 'A_FIELD') and (RDB$RELATION_NAME = 'A_VIEW') 

Затем повторно импортировать базу данных в рамках сущности.

 Смежные вопросы

  • Нет связанных вопросов^_^