37

基本的な ASP.net MVC 4 アプリケーションの開発。単純な製品カタログ アプリケーションで、2 つのデータベース テーブル ('Category' と 'Products') があります。

「Products」テーブルには、「Category id」(Category テーブルの主キー) の外部キー参照があります。

アプリケーションを実行すると、エラー メッセージが表示されます (下記参照)。

System.Data.Entity.Edm.EdmEntityType: : EntityType 'Category' has no key defined. Define the key for this EntityType.

System.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'Category' is based on type 'Category' that has no keys defined

これは初心者によくあるエラーのように見えますが、「エンティティ キー」にキーが定義されていないことに関連するすべての解決策を確認しました。それでも私の問題は解決されません。この問題と、この問題の正しい解決策を理解するのを手伝ってください。

以下は私のモデルクラスです

カテゴリ.cs

namespace ChemicalStore.Models
{
    public partial class Category
    {
        public int CatId { get; set; }
        public string CatName { get; set; }
        public string CatDescription { get; set; }
        public List<Product> Product { get; set; }
    }     
}

Products.cs

namespace ChemicalStore.Models
{
    public class Product
    {
        public int ProductId { get; set; }
        public int CatId { get; set; }
        public string ProductTitle { get; set; }
        public string ProductPrice { get; set; }
        public string ProductDescription { get; set; }
        public string ProductPackage { get; set; }
    }
}
4

7 に答える 7

79

プロパティ CatId の前に属性 [Key] を追加する必要があります。

        using System.ComponentModel.DataAnnotations;

        public partial class Category
        {
            [Key]
            public int CatId { get; set; }
            public string CatName { get; set; }
            public string CatDescription { get; set; }
            public List<Product> Product { get; set; }
        }

問題は、テーブルの主キーを知っている場合にのみ EF が機能することです。デフォルトでは、EF は ID という名前の主キー プロパティとして認識します。テーブルに別の主キーがある場合は、属性 [Key] でマークするか、流暢な構成でキーを設定できます。

于 2012-12-13T14:35:22.097 に答える
13

Entity Framework は主キー フィールドを使用して、生成されたテーブルに主キー列を作成します。

規則を使用して、いくつかのバリエーションでこの列を取得します。

  • フィールドが呼び出された場合、idまたは大文字と小文字が異なる場合。
  • フィールドがClassNameId大文字と小文字の違いで呼び出された場合。

さらにいくつかの規則が欠けている可能性がありますが、これらは最も一般的なケースです。

この規則を持つフィールドがない場合は、目的の主キーを属性でマークする必要があります[Key]

[Key]
public int CatId { get; set; }
于 2012-12-13T14:37:07.380 に答える
8

キー プロパティにセッターを追加することで、これを解決できました。以前はゲッターしかありませんでした。

public int Id { get; set; }
于 2016-02-03T18:05:12.527 に答える
7

上記のIDに[key]属性を配置するだけです..

[Table("employee")]

public class Employee
{ 

    [Key]

    public int Empno { set; get; }

    public string Empname { set; get; }      
}
于 2014-05-23T02:50:59.410 に答える
0

私の場合、web.config/app.config ファイルに正しい connectionString を追加してこの問題を修正しました。

追加するのを忘れていたため、DBContext は DB と通信できませんでした。

それが役に立てば幸い

于 2015-08-24T20:21:04.377 に答える