代码之家  ›  专栏  ›  技术社区  ›  AndyPoole

实体框架-未定义键[重复]

  •  0
  • AndyPoole  · 技术社区  · 6 年前

    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
    )  
    

    在全球范围内。尽快。反恐精英

    Database.SetInitializer<MvcApplication1.Models.studentContext>(null);
    

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

    “模型生成期间检测到一个或多个验证错误”以及“实体类型未定义键”。

    0 回复  |  直到 7 年前
        1
  •  179
  •   AmateurCoder    10 年前

    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; }
        }
    }
    
        2
  •  103
  •   Cerbrus    7 年前
    1. 性质 w/ {get; set;} (你的是公开的 变量 -一个常见的错误)。

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

        3
  •  84
  •   Simon Randy Burden    7 年前

    here ,其他我自己发现的。

    • 如果属性的名称不是 Id ,您需要添加 [Key] 归因于它。
    • 关键在于 public
    • uint , ulong
    • 此错误也可能由以下原因引起: configuration mistakes .
        4
  •  23
  •   danigitman    10 年前

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

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

    添加[列(顺序=0)] 可按1的增量添加:

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

        5
  •  19
  •   ChrisS    10 年前

    在我的例子中,我在创建“使用实体框架的视图MVC5控制器”时遇到了错误。

        6
  •  11
  •   zwcloud    5 年前

    使用[key]对我不起作用,但使用id属性就可以了。 我只是在我的类中添加这个属性。

    public int id {get; set;}
    
        7
  •  6
  •   Mayer Spitz    6 年前

    对象必须包含一个字段,该字段将用作 Primary Key ,如果您有一个名为 Id 然后,默认情况下,这将是实体框架将链接到的对象的主键。

    [Key] 属性,该属性位于要用作 System.ComponentModel.DataAnnotations :

    public class myClass
    {
        public int Id { get; set; }
        [Key]
        public string Name { get; set; }
    }
    

    https://stackoverflow.com/a/51180941/7003760

        8
  •  5
  •   Udara Kasun    5 年前

    像这样的关键词

    [Key] 
    int RoleId { get; set; } //wrong method
    

    您必须像这样使用公共关键字

    [Key] 
    public int RoleId { get; set; } //correct method
    
        9
  •  2
  •   Kyll GUISSOUMA Issam    9 年前

    EF framework提示“no key”的原因是EF framework需要数据库中的主键。要声明性地告诉EF键是哪个属性,可以添加 [Key] ID 所有物然后,EF框架将采取 身份证件

        10
  •  1
  •   Tosh    6 年前

    您不必一直使用key属性。确保映射文件正确寻址密钥

    this.HasKey(t => t.Key);
    this.ToTable("PacketHistory");
    this.Property(p => p.Key)
                .HasColumnName("PacketHistorySK");
    

    不要忘记在存储库的OnModelCreating中添加映射

    modelBuilder.Configurations.Add(new PacketHistoryMap());
    
        11
  •  1
  •   Daniel    5 年前

    不同版本 实体框架的设计。一个版本用于web项目,另一个版本用于包含模型的公共项目。

    我不得不这么做 整合nuget包 .

    enter image description here

        12
  •  0
  •   Debendra Dash    7 年前

    好吧,但就我而言,我有两门课是这样的

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

    删除上层阶级后,它对我来说很好。

        13
  •  0
  •   user11192253    4 年前

    我在自己的项目中也通过解决代码中的这一行来解决这个问题。 我补充了以下内容。

    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    

    在意识到我的错误后,我去把它改成了

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]