C# 在MVC类上创建主键字段
我是MVC和C的新手。我只是偶然发现了它,发现它很有趣。我遇到了一个不允许我继续的问题。 这是我的密码: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
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);
}
}