6

既存のデータベースに基づいて Entity Framework モデルを作成しました。Entity Framework は ADO.NET DbContext Generator を使用しています。

最初のプロジェクトの DLL を使用する MVC3/Razor プロジェクトも作成しました。「追加 -> コントローラ」オプションをクリックして必要なフィールドに入力すると、厄介なエラーが発生します。

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

これを回避するには、Visual Studio によって生成された Groups.cs に移動し、「using System.ComponentModel.DataAnnotations;」を追加する必要があります。[Key] を Groups フィールドの宣言に追加します。ただし、これは生成されたコードです。Entity Framework Project を再コンパイルすると、変更内容はもちろん失われます。

だから - 私の質問は:

Visual Studio がキー フィールドが何であるかを理解できない原因となっている何か間違ったことをしているのですか、それともキーが何であるかを理解するのを妨げているスキャフォールディング コードの単なるバグですか。

これは、文字列ベースの主キーでのみ失敗することに注意してください。フィールドが整数として宣言されていた場合、すべてが完全に機能します。

問題のあるテーブルは次のとおりです。

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]

私の環境は次のとおりです。

  • ビジュアル スタジオ 2010
  • エンティティ フレームワーク 4.1
  • MVC3
  • SP3 を適用した SQL Server 2008
  • 4

    2 に答える 2

    1

    デフォルトでは、EF はプロパティを PrimaryKey と見なしますが、それがIDor {TableName}ID...の形式である場合にのみ、GroupNameIdまたは Id である必要があります。

    2 番目のオプションはGroup_name by adding/decorating [Key]、フィールドの上の属性です。

    于 2012-12-25T04:21:33.217 に答える
    1

    MVC スキャフォールディングでは、慣例として、主キーのプロパティ名に「Id」が含まれていると想定していると思いますが、よくわかりません。
    可能であれば、テーブルの主キーとして使用する代理キーを作成して、group_name を変更する必要がある場合に、発生する問題を処理する必要がないようにします。

    于 2011-11-22T18:37:53.433 に答える