Должен ли я обязательно иметь PK в исходной таблице для создания модели данных сущности ADO.NET?

Я пытаюсь "Entitify" некоторую внешнюю таблицу (которую я не администрирую), чтобы использовать ее в приложении MVC, и в принципе я не очень успешен с попыткой (вывод VS2008):

Список ошибок [0 ошибок] [0 предупреждений] [1 сообщение]

Описание

The table/view 'DATABASE.dbo.table' 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.

Файл

C:\Documents and Settings\%USERNAME%\My Documents\Visual Studio 2008\Projects\MVC_Entity_Test\MVC_Entity_Test\Models\EmployeesDataModel.edmx

Линия

0

Столбец

1

Проект

MVC_Entity_Test

Вывод

Показать вывод из: Модель данных сущности

Added the connection string to Web.Config.
Successfully registered the assembly 'System.Data.Entity, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089' in Web.Config.
The model was generated with warnings or errors.
Please see the Error List for more details. These issues must be fixed before
running your application.
Loading metadata from database took 00:00:06.2809306.
Generating model took 00:00:03.0359078.
Writing out the EDMX file took 00:00:00.0230083.
Added the connection string to Web.Config.
Successfully registered the assembly 'System.Data.Entity, Version=3.5.0.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089' in Web.Config.
The model was generated with warnings or errors.
Please see the Error List for more details. These issues must be fixed before running
your application.
Loading metadata from database took 00:00:12.3208290.
Generating model took 00:00:03.6914563.
Writing out the EDMX file took 00:00:02.1670689.

Итак, мой вопрос: обязательно ли объявить PK в таблице source, чтобы правильно сопоставить его как объект ASP.NET?

Примечание. Я бы не хотел, чтобы эта ветка превратилась в диссертацию о великолепном, основанном на стандартах, академически обоснованном моделировании баз данных, дело в том, что я должен иметь дело с этой внешней таблицей, которая поступает откуда-то из представления. , который исходит из какой-то таблицы и т. д., так что я действительно не могу это контролировать. Дело в том, что я просто хочу довести дело до конца.


person Community    schedule 15.05.2009    source источник


Ответы (2)


Entity Framework - это платформа сопоставления, поэтому ей нужен способ однозначно сопоставить каждую строку с объектом. Для этого требуется некоторая форма уникального идентификатора, который используется для генерации операторов SQL DML, чтобы можно было изменить строку.

В вашей ситуации, если есть комбинация столбцов, не содержащих NULL, которые однозначно идентифицируют строку, вы можете вручную добавить необходимую информацию в файл edmx. На этой странице MSDN описаны основы добавления объекта в edmx вручную, http://msdn.microsoft.com/en-us/library/bb399785.aspx. Помните, что это просто XML-файл, который вы можете редактировать.

person Community    schedule 15.05.2009
comment
Лэнс, большое спасибо за пост! Я проверял документы и должен сказать, что теперь я более уверен в EF, я попытаюсь отредактировать эти XML вручную. - person Nano Taboada; 19.05.2009
comment
Посмотрите на инструмент edmgen.exe, когда делаете это вручную. Я немного поработал с ним, но его можно использовать для проверки файлов XML, что избавит вас от головной боли. - person LanceSc; 20.05.2009

Что ж, я обычно рекомендую как лучшую практику помещать первичный ключ в любую таблицу - за исключением очень редких случаев, таких как таблица, используемая для массовой загрузки данных и т. Д.

В конце концов, только с помощью первичного ключа вы можете однозначно идентифицировать и разделять строки в таблице (и, следовательно, сущности или экземпляры объектов в вашей модели предметной области).

Один гуру SQL даже сказал: Если у него нет первичного ключа, это не таблица! :-)

Марк

person Community    schedule 15.05.2009
comment
Марк, спасибо за комментарий, но, как я объяснил в примечании, у меня нет никакого контроля над этим источником данных, но все же я хотел бы полагаться на Entity для управления им. - person Nano Taboada; 16.05.2009