EntityType' SelectListItem'没有定义键。定义此EntityType的键

时间:2014-11-23 16:14:09

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-4 model-view-controller

我有一个模型类

public class Student
{
    public int StudentId { get; set; }
    public string StudentName { get; set; }
    public ICollection<SelectListItem> CourseList { get; set; }
}

public class StudentContext : DbContext
{
    public DbSet<Student> Students { get; set; }
}

我尝试将其用作

List<Student> sList =  db.Students.ToList();

我收到了以下错误

\tSystem.Data.Entity.Edm.EdmEntityType: : EntityType 'SelectListItem' has no key defined. Define     the key for this EntityType.
\tSystem.Data.Entity.Edm.EdmEntitySet: EntityType: EntitySet 'SelectListItems' is based on type   'SelectListItem' that has no keys defined.

请建议我在哪里做错了。

2 个答案:

答案 0 :(得分:8)

[NotMapped]注释添加到LIST类

[NotMapped]
public List<SelectListItem> ListItems { get; set; }

NotMapped代码第一约定规定,支持数据类型的每个属性都在数据库中表示。但在您的应用程序中并非总是如此。例如,您可能在Blog类中有一个属性,该属性根据Title和BloggerName字段创建代码。该属性可以动态创建,不需要存储。您可以使用NotMapped注释(例如此BlogCode属性)标记未映射到数据库的任何属性。

[NotMapped] 
public string BlogCode 
{ 
    get 
    { 
        return Title.Substring(0, 1) + ":" + BloggerName.Substring(0, 1); 
    } 
}

您可以参考EF code first Data Annotations

上的链接

答案 1 :(得分:2)

您不应该尝试将SelectListItem存储在数据库中,因为这是MVC特定的概念。而是创建一个自定义实体类并改为使用它;

public class Course
{
    public int CourseId { get; set; }
    public string CourseTitle  { get; set; }
}

public class Student
{
    public int StudentId { get; set; }
    public string StudentName { get; set; }
    public ICollection<Course> CourseList { get; set; }
}

public class StudentContext : DbContext
{
    public DbSet<Student> Students { get; set; }
    public DbSet<Course> Courses { get; set; }
}