C# 试图搭建一个视图,我得到;无法检索“”的元数据;和';验证错误'';实体类型没有定义键';

C# 试图搭建一个视图,我得到;无法检索“”的元数据;和';验证错误'';实体类型没有定义键';,c#,asp.net,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Razor,我有一个计划,我试图找出一个问题,我的朋友没有得到。我试图从我的控制器中构建一个视图,我得到了一个 error "Unable to retrieve metadata for 'GradedWork.Controllers.CourseAddForm'. One or more validation errors were detected during model generation: GradedWork.Model.CourseAddForm : EntityType 'Cour

我有一个计划,我试图找出一个问题,我的朋友没有得到。我试图从我的控制器中构建一个视图,我得到了一个

error "Unable to retrieve metadata for 'GradedWork.Controllers.CourseAddForm'. 
One or more validation errors were detected during model generation: 

GradedWork.Model.CourseAddForm : EntityType 'CourseAddForm' has no key defined. Define the 
key for this EntityType. CourseAddForm: EntityType: EntitySet 'CourseAddForm' is based on 
type 'CourseAddForm' that has no keys defined.'
我试图使用CourseAddForm视图模型类构建一个创建视图,但我总是遇到这个错误

我的CourseAddForm课程不应该包含一个关键字段,我的朋友们没有我遇到的这个问题

我的视图模型类:

namespace GradedWork.Controllers
{
public class CourseList
{
    [Key]
    public int Id { get; set; }

    [Display(Name = "Name")]
    public string Name { get; set; }

}

public class CourseAddForm
{


    [Display(Name = "Course Code")]
    public int CourseCode { get; set; }

    // [Required]
    [Display(Name = "Name")]
    public string Name { get; set; }

    //  [Required]
    [Display(Name = "Semester")]
    public string Semester { get; set; }

    // [Required]
    [Display(Name = "Section Id")]
    public string SectionId { get; set; }

    [Display(Name = "Teacher")]
    public ICollection<TeacherList> Teacher { get; set; }

    [Display(Name = "Student")]
    public ICollection<StudentList> Students { get; set; }

    [Display(Name = "Graded Works")]
    public ICollection<GradedWorkList> GradedWorks { get; set; }


    public CourseAddForm()
    {
        this.Teacher = new List<TeacherList>();
        this.Students = new List<StudentList>();
        this.GradedWorks = new List<GradedWorkList>();

    }

}

public class CourseAdd
{

    [Display(Name = "Course Code")]
    public int CourseCode { get; set; }

    // [Required]
    [Display(Name = "Name")]
    public string Name { get; set; }

    //  [Required]
    [Display(Name = "Semester")]
    public string Semester { get; set; }

    // [Required]
    [Display(Name = "Section Id")]
    public string SectionId { get; set; }

    [Display(Name = "Teacher")]
    public ICollection<Teacher> Teacher { get; set; }

    [Display(Name = "Student")]
    public ICollection<Student> Students { get; set; }

    [Display(Name = "Graded Works")]
    public ICollection<GradedWorks> GradedWorks { get; set; }


    public CourseAdd()
    {
        this.Teacher = new List<Teacher>();
        this.Students = new List<Student>();
        this.GradedWorks = new List<GradedWorks>();

    }

}

public class CourseBase : CourseAdd
{
    [Key]
    public int Id { get; set; }

}
}
namespace-GradedWork.Controllers
{
公共课教师
{
[关键]
公共int Id{get;set;}
[显示(Name=“Name”)]
公共字符串名称{get;set;}
}
公共课授课形式
{
[显示(Name=“课程代码”)]
public int CourseCode{get;set;}
//[必需]
[显示(Name=“Name”)]
公共字符串名称{get;set;}
//[必需]
[显示(Name=“学期”)]
公共字符串{get;set;}
//[必需]
[显示(Name=“Section Id”)]
公共字符串SectionId{get;set;}
[显示(Name=“Teacher”)]
公共ICollection教师{get;set;}
[显示(Name=“Student”)]
公共ICollection学生{get;set;}
[展示(Name=“分级作品”)]
公共ICollection GradedWorks{get;set;}
公共课程表格()
{
this.Teacher=新列表();
this.Students=newlist();
this.GradedWorks=新列表();
}
}
公开课
{
[显示(Name=“课程代码”)]
public int CourseCode{get;set;}
//[必需]
[显示(Name=“Name”)]
公共字符串名称{get;set;}
//[必需]
[显示(Name=“学期”)]
公共字符串{get;set;}
//[必需]
[显示(Name=“Section Id”)]
公共字符串SectionId{get;set;}
[显示(Name=“Teacher”)]
公共ICollection教师{get;set;}
[显示(Name=“Student”)]
公共ICollection学生{get;set;}
[展示(Name=“分级作品”)]
公共ICollection GradedWorks{get;set;}
公共课程D()
{
this.Teacher=新列表();
this.Students=newlist();
this.GradedWorks=新列表();
}
}
公共类课程库:CourseAdd
{
[关键]
公共int Id{get;set;}
}
}
我正在尝试构建的控制器方法

public ActionResult Create()
    {
        var addForm = new CourseAddForm();

        foreach (var item in m.GetAllTeachersAsList())
        {
            addForm.Teacher.Add(item);
        }

        foreach (var item in m.GetAllStudentsAsList())
        {
            addForm.Students.Add(item);
        }

        foreach (var item in m.GetAllGradedWorkAsList())
        {
            addForm.GradedWorks.Add(item);
        }

        return View(addForm);
    }

    //
    // POST: /Course/Create
    [HttpPost]
    public ActionResult Create(CourseAdd newItem)
    {
        if (ModelState.IsValid)
        {

            var addedItem = m.AddCourse(newItem);

            if (addedItem == null)
            {
                return RedirectToAction("Index");
            }

            else
            {
                return RedirectToAction("Details", new { id = addedItem.Id });
            }


        }

        else
        {
            var addForm = Mapper.Map<CourseAddForm>(newItem);

            foreach (var item in m.GetAllTeachersAsList())
            {
                addForm.Teacher.Add(item);
            }

            foreach (var item in m.GetAllStudentsAsList())
            {
                addForm.Students.Add(item);
            }

            foreach (var item in m.GetAllGradedWorkAsList())
            {
                addForm.GradedWorks.Add(item);
            }

            return View(addForm);
        }
    }
public ActionResult Create()
{
var addForm=新CourseAddForm();
foreach(m.GetAllTeachersAsList()中的变量项)
{
addForm.Teacher.Add(项目);
}
foreach(m.GetAllStudentsAsList()中的变量项)
{
addForm.Students.Add(项目);
}
foreach(m.GetAllGradedWorkAsList()中的变量项)
{
addForm.GradedWorks.Add(项);
}
返回视图(addForm);
}
//
//POST:/课程/创建
[HttpPost]
公共行动结果创建(CourseAdd newItem)
{
if(ModelState.IsValid)
{
var addedItem=m.AddCourse(newItem);
if(addedItem==null)
{
返回操作(“索引”);
}
其他的
{
返回RedirectToAction(“Details”,new{id=addedItem.id});
}
}
其他的
{
var addForm=Mapper.Map(newItem);
foreach(m.GetAllTeachersAsList()中的变量项)
{
addForm.Teacher.Add(项目);
}
foreach(m.GetAllStudentsAsList()中的变量项)
{
addForm.Students.Add(项目);
}
foreach(m.GetAllGradedWorkAsList()中的变量项)
{
addForm.GradedWorks.Add(项);
}
返回视图(addForm);
}
}
我的连接字符串:

<connectionStrings>
<add name="DataContext" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\StoreName.mdf;Initial Catalog=StoreName;Integrated Security=True" providerName="System.Data.SqlClient" />


我想知道你继承的方向是否错误。您在
CourseBase
上有一个主键,但是
CourseBase
正在插入
CourseBase
。因此,
CourseAdd
的所有属性都是
CourseBase
的一部分,而不是相反。因此,
CourseAdd
上没有主键,就像神秘的错误消息试图说的那样,“没有定义键”

尝试:


CourseBase
不继承
CourseBeadd
我所要做的就是删除我的支架中的datacontext选项,它就可以工作了…

这不是一个真正的选项,因为我的类现在的设置方式是我老师想要的传统方式,所以base应该继承add,add是base的加号,出于某种原因,基类意味着它是抽象的,并且应该从中继承类。加上每个实体/数据库选项卡。这似乎是stackoverflow的普遍共识,但对于我的情况,addform和add不能有id和[key]。出于某种原因,我的朋友们没有这个问题。
public class CourseAdd : CourseBase {
    // trim
}