我是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
答案 0 :(得分:19)
实体框架CodeFirst默认情况下通过名称识别密钥。
有效名称为Id
或<YourClassName>Id
。
您的媒体资源应命名为Id
或AccountTypesId
另一种方法是使用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;组; }
希望它能够得到解决;费尔南多。