控制器:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication1.Models;
using System.ComponentModel.DataAnnotations.Schema;
namespace MvcApplication1.Controllers
{
public class studentsController : Controller
{
//
// GET: /students/
public ActionResult details()
{
int id = 16;
studentContext std = new studentContext();
student first = std.details.Single(m => m.RollNo == id);
return View(first);
}
}
}
DbContext模型:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace MvcApplication1.Models
{
public class studentContext : DbContext
{
public DbSet<student> details { get; set; }
}
}
型号:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
namespace MvcApplication1.Models
{
[Table("studentdetails")]
public class student
{
public int RollNo;
public string Name;
public string Stream;
public string Div;
}
}
数据库表:
CREATE TABLE [dbo].[studentdetails](
[RollNo] [int] NULL,
[Name] [nvarchar](50) NULL,
[Stream] [nvarchar](50) NULL,
[Div] [nvarchar](50) NULL
)
在global.asax.cs
Database.SetInitializer<MvcApplication1.Models.studentContext>(null);
上面的代码列出了我正在处理的所有类。运行我的应用程序后收到错误:
“在模型生成期间检测到一个或多个验证错误”以及“实体类型未定义任何键”。
答案 0 :(得分:151)
Model类应更改为:
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
namespace MvcApplication1.Models
{
[Table("studentdetails")]
public class student
{
[Key]
public int RollNo { get; set; }
public string Name { get; set; }
public string Stream { get; set; }
public string Div { get; set; }
}
}
答案 1 :(得分:89)
确保学生班级的公共成员被定义为属性 w / {get; set;}
(您的公共变量 - 一个常见的错误)。< / p>
在您选择的媒体资源上方放置[Key]
注释。
答案 2 :(得分:77)
这可能有几个原因。其中一些我发现here,其他我自己发现的。
Id
,则需要向其添加[Key]
属性。public
uint
,ulong
等无符号类型。答案 3 :(得分:19)
我知道这篇文章迟到了 这个解决方案帮助了我:
[Key]
[Column(Order = 0)]
public int RoleId { get; set; }
添加[Column(Order = 0)] 之后[关键] 可以通过增加1:
来添加 [Key]
[Column(Order = 1)]
public int RoleIdName { get; set; }
等...
答案 4 :(得分:15)
在我的情况下,使用Entity Framework&#34;创建带视图的&#34; MVC 5控制器时出现错误。
我只需要在创建Model类之后构建项目,并且不需要使用[Key]注释。
答案 5 :(得分:8)
使用[key]对我来说没有用,但使用id属性就可以了。 我只是在课堂上添加这个属性。
public int id {get; set;}
答案 6 :(得分:2)
EF框架提示&#39;没有密钥&#39;是EF框架需要数据库中的主键。要以声明方式告知EF键的属性,请添加[Key]
注释。或者,以最快的方式添加ID
属性。然后,EF框架默认将ID
作为主键。
答案 7 :(得分:2)
对象必须包含将用作Primary Key
的字段,如果您有一个名为Id
的字段,则默认情况下,这将是实体框架将链接到的对象的主键至。
否则,您应该在要用作[Key]
的字段上方添加Primary Key
属性,并且还需要添加名称空间System.ComponentModel.DataAnnotations
:
public class myClass
{
public int Id { get; set; }
[Key]
public string Name { get; set; }
}
答案 8 :(得分:1)
您不必一直使用key属性。确保映射文件正确寻址了键
this.HasKey(t => t.Key);
this.ToTable("PacketHistory");
this.Property(p => p.Key)
.HasColumnName("PacketHistorySK");
,并且不要忘记在存储库的OnModelCreating中添加映射
modelBuilder.Configurations.Add(new PacketHistoryMap());
答案 9 :(得分:1)
另外请记住,不要忘记添加这样的 public 关键字
guard let url = URL(string: "http://i.imgur.com/w5rkSIj.jpg") else {
return
}
let data = try? Data(contentsOf: url)
if let imageData = data {
let image = UIImage(data: imageData)
}
您必须这样使用Public关键字
[Key]
int RoleId { get; set; } //wrong method
答案 10 :(得分:0)
一切都是对的,但就我而言,我有两个这样的课程
namespace WebAPI.Model
{
public class ProductsModel
{
[Table("products")]
public class Products
{
[Key]
public int slno { get; set; }
public int productId { get; set; }
public string ProductName { get; set; }
public int Price { get; set; }
}
}
}
删除上层阶级后,它对我来说很好。
答案 11 :(得分:0)
答案 12 :(得分:0)
我遇到了类似的错误。后来我发现这是因为我将模型中的属性声明为私有。将属性从私有更改为公共可以解决该错误。
答案 13 :(得分:0)
我也通过解决代码中的这一行来解决自己的项目中的问题。 我添加了以下内容。
[DatabaseGenerated(DatabaseGeneratedOption.None)]
意识到我的错误后,我将其更改为
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
这进一步确保了每次在数据库中插入新行时,名为“ Id”的字段的值都会增加