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

Я пытаюсь "присвоить" некоторую внешнюю таблицу (которую я не администрирую), чтобы использовать ее в приложении 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

Line

0

Колонка

1

Проект

MVC_Entity_Test

выход

Показать вывод из: Entity Data Model

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?

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

Ответы [ 2 ]

6 голосов
/ 16 мая 2009

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

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

0 голосов
/ 16 мая 2009

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

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

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

Марк

...