在MVC类上创建主键字段

时间:2012-04-19 21:10:07

标签: 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 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.

我认为答案是在[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

4 个答案:

答案 0 :(得分:19)

描述

实体框架CodeFirst默认情况下通过名称识别密钥。 有效名称为Id<YourClassName>Id

您的媒体资源应命名为IdAccountTypesId

另一种方法是使用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);
    }
}

模式信息

答案 1 :(得分:1)

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

常规字段将使用EntityKeyPropert = false。

答案 2 :(得分:0)

   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);
   }
   }

答案 3 :(得分:-2)

彼得,好像你错过了一个“s”

您的帐户int应为:

public int Accounts TypeID {get;组; }

希望它能够得到解决;费尔南多。