16

我是 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

4 回答 4

23

描述

默认情况下,实体框架 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);
    }
}

模式信息

于 2012-04-19T21:13:19.340 回答
1

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

常规字段将与 EntityKeyPropert=false 一起使用。

于 2012-04-19T21:17:04.830 回答
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);
   }
   }
于 2019-12-13T19:49:12.353 回答
-2

嗨,彼得,它看到你缺少一个“s”

您的 Account int 应该是:

公共 int AccountsTypeID { 获取;放; }

希望可以解决;费尔南多。

于 2013-12-27T13:52:24.067 回答