Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC3实体框架多对多和附加列_C#_Asp.net Mvc 3_Entity Framework 4_Many To Many_Ef Code First - Fatal编程技术网

C# MVC3实体框架多对多和附加列

C# MVC3实体框架多对多和附加列,c#,asp.net-mvc-3,entity-framework-4,many-to-many,ef-code-first,C#,Asp.net Mvc 3,Entity Framework 4,Many To Many,Ef Code First,我不熟悉asp.net、mvc3和实体框架。 我正在尝试先用实体框架和代码开发一个mvc3程序。 所以我有两个类,它们有多对多的关系 一个类称为“用户”,另一个类称为“课程” 公共类课程:IValidatableObject { [...] 公共虚拟ICollection用户{get;set;} [...] } 公共类用户:IValidatableObject { [...] 公共虚拟ICollection课程{get;set;} [...] } 所以,这是可行的。但是现在我需要一个额外的字段

我不熟悉asp.net、mvc3和实体框架。 我正在尝试先用实体框架和代码开发一个mvc3程序。 所以我有两个类,它们有多对多的关系

一个类称为“用户”,另一个类称为“课程”

公共类课程:IValidatableObject
{
[...]
公共虚拟ICollection用户{get;set;}
[...]
}
公共类用户:IValidatableObject
{
[...]
公共虚拟ICollection课程{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; }
 }
公共类课程:IValidatableObject
{
[...]
公共虚拟ICollection CourseUsers{get;set;}
[...]
}
公共类用户:IValidatableObject
{
[...]
公共虚拟ICollection CourseUsers{get;set;}
[...]
}
公共课教师
{
[键,外键(“课程”),列(顺序=0)]
public int Course_ID{get;set;}
[键,外键(“用户”),列(顺序=1)]
公共字符串用户_ID{get;set;}
公共int状态{get;set;}/{pending,approved}
公共虚拟课程{get;set;}
公共虚拟用户用户{get;set;}
}
但这使得添加或编辑相关数据变得更加困难。
例如,我还没有成功地将创建课程的用户自动添加到
CourseUsers
表中。

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

好的,请回答。也许你可以帮我更新相关的表格。我通过
Membership.GetUser().ProviderUserKey.ToString()
获得用户id,但我真的不知道如何在创建新课程期间更新相关表。我在www.asp.net上读了很多教程,但我认为它们有点让人困惑。这不是它的工作原理。你问了一个问题就得到了答案。如果你有一个新问题,可以单独提问。评论不是为了问另一个无关的问题。
 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; }
 }