C# 在MVC类上创建主键字段

C# 在MVC类上创建主键字段,c#,asp.net-mvc,entity-framework,asp.net-mvc-4,C#,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,我是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 Accoun

我是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; }
    }
}
我创建了控制器和视图

为此,我一直得到以下错误:

在模型生成过程中检测到一个或多个验证错误:

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.
我在谷歌上搜索到,答案是在
公共int-AccountTypeID{get;set;}
上添加
[Key]
,因此它可以如下所示:

namespace MyHotel.Models
{
    public class AccountTypes
    {
        [Key]
        public int AccountTypeID { get; set; }
        public string AccountTypeName { get; set; }
    }
}
但到目前为止没有结果。 注意:我使用的是MVC4 默认情况下,实体框架代码首先根据名称识别密钥。 有效名称为
Id
Id

您的属性应命名为
Id
AccountTypesId

另一种方法是使用
ModelBuilder
指定键

样品
公共类MyDbContext:DbContext
{
公共数据库集

尝试使用[EdmScalarPropertyAttribute(EntityKeyProperty=true,IsNullable=false)]属性来指示键字段


常规字段的EntityKeyPropert=false。

您好,Peter,您似乎缺少一个“s”

您的帐户应为:

public int AccountsTypeID{get;set;}

希望能解决;Fernando。

公共类MyDbContext:DbContext
   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);
   }
   }
{ 公共数据库集帐户类型{get;set;} 模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder) { modelBuilder.Entity().HasKey(x=>x.AccountTypeID); 基于模型创建(modelBuilder); } }
一般来说,您通常会在不带(s)的情况下调用此模型对象AccountType。这是标准约定,不需要关键属性。我们应该是通灵的吗?什么是“但到目前为止没有结果”意思是?这是属性和模型对象命名模式的不同。我现在可以使用了。谢谢。非常感谢。这正是我要找的=)在Entity声明的DbModelBuilder.Entity()的第二行到最后一行,我遇到了这个错误'是一个方法,在给定的上下文中无效…您仍然可以提供任何帮助吗?@tCoe记录答案以供将来参考,因为我刚刚遇到了相同的问题。只需在实体后的那一行添加一对括号,如下所示:
modelBuilder.Entity().HasKey(x=>x.AccountTypeID);
   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);
   }
   }