【问题标题】:MVC3 Entity Framework many-to-many with additional columnMVC3 实体框架多对多与附加列
【发布时间】:2011-07-07 11:09:56
【问题描述】:

我是 asp.net、mvc3 和实体框架的新手。 我正在尝试使用实体框架和代码优先开发一个 mvc3 程序。 所以我有两个具有多对多关系的类。

一个名为“User”的类,另一个是“Course”。

 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 表中。

【问题讨论】:

    标签: c# asp.net-mvc-3 entity-framework-4 many-to-many ef-code-first


    【解决方案1】:

    不,没有更简单的方法可以做到这一点。将任何其他字段添加到联结表后,必须将其映射为实体以允许您访问该字段。它不再是纯粹的多对多关系。它是模型中的一个新实体,具有两个一对多关系。

    【讨论】:

    • 好的,谢谢你的回答。也许您可以帮助我更新相关表格。我通过Membership.GetUser().ProviderUserKey.ToString() 获得了 user_id,但我真的不知道如何在创建新课程期间更新我的相关表。我在 www.asp.net 上阅读了很多教程,但我认为它们有点令人困惑。
    • 这里不是这样的。你问一个问题,你就会得到答案。如果您有新问题,请单独提出。评论不是为了问其他不相关的问题。
    猜你喜欢
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多