c# - tutorial - entity framework是什么




EntityType没有键定义的错误 (6)

  1. 确保学生类的公共成员被定义为w / {get; set;} {get; set;} (你的是公共变量 - 一个常见的错误)。

  2. [Key]注释放置在所选属性的顶部。

控制器:

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

上面的代码列出了我正在处理的所有类。 运行我的应用程序时收到错误:

“在模型生成期间检测到一个或多个验证错误”以及“实体类型没有定义密钥”。


EF框架提示“无关键”的原因是EF框架需要数据库中的主键。 要声明地告诉EF关键是哪个属性,你需要添加一个[Key]注解。 或者,最快的方法是添加一个ID属性。 然后,EF框架默认将ID作为主键。


一切正常,但在我的情况下,我有两个这样的课

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

删除上层类后,对我来说工作正常。


使用[键]不适用于我,但使用id属性来做到这一点。 我只是在我的课堂中添加这个属性。

public int id {get; set}

我知道这个帖子很晚,但这个解决方案帮助了我:

    [Key]
    [Column(Order = 0)]
    public int RoleId { get; set; }

在[Key]之后添加[Column(Order = 0)]可以按1增加:

    [Key]
    [Column(Order = 1)]
    public int RoleIdName { get; set; }

等等...


这可能有几个原因。 我在here找到here其中的一些,还有一些是我自己发现的。

  • 如果该属性的名称不是Id ,则需要将[Key]属性添加到该属性中。
  • 关键需要成为一个财产,而不是一个领域。
  • 关键需要public
  • 关键需要是符合CLS的类型,这意味着不允许使用uintulong等无符号类型。
  • 此错误也可能由配置错误引起。




entity-framework