我是asp.net,mvc3和实体框架的新手。 我正在尝试使用实体框架和代码优先开发mvc3程序。 所以我有两个有多对多关系的课程。
一个名为“用户”的班级,另一个名为“课程”。
public class Course : IValidatableObject
{
[...]
public virtual ICollection<User> Users { get; set; }
[...]
}
public class User : IValidatableObject
{
[...]
public virtual ICollection<Course> Courses { get; set; }
[...]
}
所以,这很有效。但是现在我需要一个额外的字段来保证课程注册的状态。 有一种我不知道的简单方法吗?
我试过这种方式:
public class Course : IValidatableObject
{
[...]
public virtual ICollection<CourseUser> CourseUsers { get; set; }
[...]
}
public class User : IValidatableObject
{
[...]
public virtual ICollection<CourseUser> CourseUsers { get; set; }
[...]
}
public class CourseUser
{
[Key, ForeignKey("Course"), Column(Order = 0)]
public int Course_ID { get; set; }
[Key, ForeignKey("User"), Column(Order = 1)]
public string User_ID { get; set; }
public int Status { get; set; } //{ pending, approved }
public virtual Course Course { get; set; }
public virtual User User { get; set; }
}
但这使得添加或编辑相关数据变得更加困难。
例如,我没有管理它自动将创建课程的用户添加到CourseUsers
表。
答案 0 :(得分:1)
没有更简单的方法可以做到这一点。将任何其他字段添加到联结表后,必须将其映射为实体以允许您访问该字段。它不再是纯粹的多对多关系。它是模型中的一个新实体,具有两个一对多的关系。