首页>Program>source

我是MVC和实体框架的新手.我进行了大量搜索,发现了一些类似的问题(例如,实体类型未定义键),但无法解决我的问题.

namespace MvcAppInvoice.Models
{
    public class Customer
    {
        public int CustomerID { get; set; }
        public string FirstName { get; set; }
        public string SurName { get; set; }
        public virtual CustomerType Type { get; set; }
    }
    public class CustomerType
    {
        public int TypeId { get; set; }
        public string TypeName { get; set; }
        public virtual ICollection<Customer> customers { get; set; }
    }
}

当我尝试添加控制器时,出现以下错误:

最新回答
  • 5月前
    1 #

    通常,如果属性命名为 Id,则按惯例首先进行代码隐式设置实体类型的键   或 TypeName+Id .就您而言, TypeId   两者都不是,所以您应该使用KeyAttribute或使用EntityTypeConfiguration的流利语法将其明确标记为键。HasKey方法

  • 5月前
    2 #

    我也遇到了同样的问题.在找到适合我的解决方案之前,我重新启动了3次项目.我有一个手动创建的公共类,称为UserContext.当我运行向导以添加ADO类时,该向导生成了U​​serContext的部分类.我删除了usercontext类,并修改了VS为我生成的类.

    namespace UserLayer.Models
    {
        using System;
        using System.Data.Entity;
        using System.Data.Entity.Infrastructure;
        public class UserContext : DbContext
        {
            public DbSet<UserDetail> UserDetails { get; set; }
        }
    }
    

    现在,它可能无需修改即可工作.也许删除我的班级版本会起作用.我不知道.回想一下,当我尝试添加控制器时遇到了您的错误.我怀疑这是VS2012中的错误,因为可以存在相同名称的部分类和公共类.目的是允许程序员扩展部分类的定义。

  • 5月前
    3 #

    添加名称空间

    using System.ComponentModel.DataAnnotations;
    

    将键属性添加到您的CustomerID 像这样

    [Key]
    public int CustomerID { get; set; }
    

    然后构建应用程序并尝试添加控制器.这将起作用

  • 5月前
    4 #

    运行选定的代码生成器时出错,无法检索未定义键的实体类型的元数据。

    威兹威兹

    型号

      one more important thing sql table only takes [Id] then entity framework will work if you use other primary key like[MenuId] it wont.

      you should add validation on Model which is Key and Column order

      column order = 1 because after [key] added its increment by 1 that's why

    然后在实体框架下创建控制器后构建它,它将起作用

    我希望能帮上忙。

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

  • tsql:使用Dapper-dot-net,如何将SQL uniqueidentifier列映射到Net类型?
  • python:pandas检查多个条件