6

Tôi đã tạo Mô hình khung thực thể dựa trên cơ sở dữ liệu hiện có. Khung thực thể đang sử dụng Trình tạo DbContext ADO.NET.MVC3/Razor Thêm bộ điều khiển "Get-PrimaryKey" không tìm thấy khóa chính

Tôi cũng đã tạo một dự án MVC3/Razor đang sử dụng DLL từ dự án đầu tiên. Khi tôi bấm vào tùy chọn "Add -> điều khiển" và điền thông tin vào các trường bắt buộc tôi nhận được một lỗi gây phiền nhiễu:

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 

Để làm được việc này, tôi cần phải đi đến các Groups.cs đã được tạo ra bởi Visual Studio và thêm 'using System.ComponentModel.DataAnnotations;' và sau đó thêm [Key] vào khai báo trường Groups. Tuy nhiên, đây là mã được tạo. Nếu tôi biên dịch lại Dự án khung thực thể, tất nhiên thay đổi của tôi sẽ bị mất.

Vì vậy, - Câu hỏi của tôi là:

Am tôi làm sai điều gì đó gây ra Visual Studio để không thể tìm ra những gì các lĩnh vực chủ chốt là, hoặc là này chỉ là một lỗi với Bộ luật giàn giáo đó là ngăn không cho nó phát hiện ra rằng Key là.

Tôi nên đề cập rằng điều này chỉ thất bại với khóa chính dựa trên chuỗi. Nếu trường đã được khai báo là một số nguyên, thì mọi thứ hoạt động hoàn hảo.

Dưới đây là bảng có vấn đề:

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] 

Dưới đây là môi trường của tôi:

  • Visual Studio 2010
  • Entity Framework 4.1
  • MVC 3
  • SQL Server 2008 SP3
  • +0

    Bạn đã chỉ định thực thể của mình bằng cách nào? – cpoDesign

    Trả lời

    1

    Tôi tin rằng MVC Giàn giáo, như một quy ước, hy vọng rằng khóa chính h là "Id" trên tên của tài sản, nhưng tôi không chắc chắn.
    Nếu có thể, trong trường hợp của bạn, tôi sẽ tạo một surrogate key để sử dụng làm khóa chính cho bảng, để khi cần thay đổi tên nhóm, tôi sẽ không phải xử lý các vấn đề phát sinh.

    +0

    Tôi đã thử một vài biến thể. Lạnh MvcScaffolding dường như dựa vào kiểu dữ liệu, không phải là tên thuộc tính. Thêm một khóa thay thế không phải là một tùy chọn ans Tôi không thể thay đổi lược đồ cơ sở dữ liệu mà không ảnh hưởng đến các ứng dụng kế thừa - Dù sao, cách giải quyết mà tôi đã đề cập đã làm tôi vượt qua vấn đề, nhưng tôi vẫn nghĩ đó là lỗi trong MvcScaffolding. – Adrian

    +0

    Vì bạn không thể thay đổi giản đồ cơ sở dữ liệu, bạn có thể thay đổi mẫu T4 để thêm DataAnnotation [Key] vào lớp của bạn. Bằng cách đó, bạn sẽ không bị mất khi bạn cập nhật mô hình của mình. –

    1

    Theo mặc định, EF coi thuộc tính là PrimaryKey, chỉ khi nó ở định dạng ID hoặc {TableName}ID ... trong trường hợp của bạn, nó phải là GroupNameId hoặc Id.

    Tùy chọn thứ hai là Group_name by adding/decorating [Key] Thuộc tính phía trên trường.

    Các vấn đề liên quan