web-dev-qa-db-ja.com

MVCクラスでの主キーフィールドの作成

MVCとC#は初めてです。偶然見つけて面白かったです。続行できない問題が発生しました。これが私のコードです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; 

namespace MyHotel.Models
{
    public class AccountTypes
    {
        public int AccountTypeID { get; set; }
        public string AccountTypeName { get; set; }
    }
}

その後、コントローラーとビューを作成しました。

そして、これのために、私はこのエラーを得続けます:

モデルの生成中に1つ以上の検証エラーが検出されました:

System.Data.Edm.EdmEntityType: : EntityType 'AccountTypes' has no key defined. Define the key for this EntityType.
System.Data.Edm.EdmEntitySet: EntityType: EntitySet "AccountTypes" is based on type "AccountTypes" that has no keys defined.

答えは[Key] オーバー public int AccountTypeID { get; set; }したがって、次のようになります。

namespace MyHotel.Models
{
    public class AccountTypes
    {
        [Key]
        public int AccountTypeID { get; set; }
        public string AccountTypeName { get; set; }
    }
}

しかし、今のところ結果はありません。注:私はMVC 4を使用しています

14
Peter

説明

Entity Framework CodeFirstは、デフォルトで名前によってキーを認識します。有効な名前はIdまたは<YourClassName>Id

プロパティの名前はIdまたはAccountTypesIdにする必要があります

もう1つの方法は、ModelBuilderを使用してキーを指定することです。

サンプル

public class MyDbContext : DbContext
{
    public DbSet<AccountTypes> AccountTypes { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<AccountTypes>.HasKey(x => x.AccountTypeID);
        base.OnModelCreating(modelBuilder);
    }
}

モード情報

20
dknaack

[EdmScalarPropertyAttribute(EntityKeyProperty = true、IsNullable = false)]プロパティを使用して、キーフィールドを指定してみてください。

通常のフィールドはEntityKeyPropert = falseになります。

1
   public class MyDbContext : DbContext
 {
  public DbSet<AccountTypes> AccountTypes { get; set; } 

    protected override void OnModelCreating(ModelBuilder modelBuilder)
   {
    modelBuilder.Entity<AccountTypes>().HasKey(x => x.AccountTypeID);
    base.OnModelCreating(modelBuilder);
   }
   }
0