MVC3 / Razor Add Controller «Get-PrimaryKey» не может найти первичный ключ - PullRequest
6 голосов
/ 22 ноября 2011

Я создал Entity Framework Model на основе существующей базы данных.Платформа Entity Framework использует генератор ADO.NET DbContext.

Я также создал проект MVC3 / Razor, который использует DLL из первого проекта.Когда я нажимаю на опцию «Добавить -> Контроллер» и заполняю необходимые поля, я получаю досадную ошибку:

Scaffolding GroupController...
EMR_MasterEntities already has a member called 'Groups'. Skipping...
Get-PrimaryKey : Cannot find primary key property for type 'CHS.CCC.DataModel.Group'. No properties appear to be primar
y keys.
At C:\Users\adriangilbert\Desktop\CHS.Monitor\packages\MvcScaffolding.1.0.6\tools\Controller\MvcScaffolding.Controller.
ps1:74 char:29
+ $primaryKey = Get-PrimaryKey <<<<  $foundModelType.FullName -Project $Project -ErrorIfNotFound
    + CategoryInfo          : NotSpecified: (:) [Get-PrimaryKey], Exception
    + FullyQualifiedErrorId : T4Scaffolding.Cmdlets.GetPrimaryKeyCmdlet

Чтобы обойти это, мне нужно перейти к сгенерированному Groups.csVisual Studio и добавьте «использование System.ComponentModel.DataAnnotations;»и затем добавьте [Ключ] к объявлению поле Группы.Однако это сгенерированный код.Если я перекомпилирую Entity Framework Project, мои изменения, конечно, будут потеряны.

Итак - мой вопрос:

Я делаю что-то не так, из-за чего Visual Studio не будетв состоянии выяснить, что такое поле Key, или это просто ошибка в коде Scaffolding, которая не позволяет выяснить, что это ключ.

Я должен упомянуть, что это не работает только со строкойпервичные ключиЕсли поле было объявлено как Integer, то все работает отлично.

Вот проблемная таблица:

CREATE TABLE [dbo].[Groups](
    [group_name] [varchar](45) NOT NULL,
    [dbname] [varchar](45) NOT NULL,
    [user] [varchar](45) NULL,
    [CompatibilityVersion] [nvarchar](20) NULL,
    ...

PRIMARY KEY CLUSTERED  ([group_name] ASC)
) ON [PRIMARY]

Вот моя среда:

Visual Studio 2010 Entity Framework 4.1 MVC 3 SQL Server 2008 с пакетом обновления 3

Ответы [ 2 ]

1 голос
/ 25 декабря 2012

По умолчанию EF рассматривает свойство как PrimaryKey, только если оно имеет формат ID или {TableName}ID ... в вашем случае это должно быть GroupNameId или Id.

Второй параметр - Group_name by adding/decorating [Key] Атрибут над полем.

1 голос
/ 22 ноября 2011

Я считаю, что MVC Scaffolding, как правило, ожидает, что первичный ключ имеет "Id" в имени свойства, но я не уверен.
Если возможно, в вашем случае я бы создал суррогатный ключ для использования в качестве первичного ключа для таблицы, чтобы при изменении имени группы не пришлось бы решать возникающие проблемы.

...