【发布时间】:2015-03-01 05:25:21
【问题描述】:
我遇到了一个我不知道的错误,因为它没有提供任何细节,只是说对象引用未设置为对象错误的实例。我在 Person 和 Course 类之间有一个多对多的关系,定义如下。当我尝试将新人员添加到课程中(即,将学生注册到课程中)时,我在执行 Linq 语句的行中出现错误。我提供了代码的相关部分如下:
这是引发错误的代码:
Person userToRegister = _db.People.Single(p => p.Id == i.Value);//not null when debugging
int courseId = Convert.ToInt32(drp_Courses.SelectedValue);
Course myCourse = _db.Courses.Single(c => c.CourseId == courseId);//not null when debugging
myCourse.Members.Add(userToRegister);//This line throws the error
_db.SaveChanges();
这是 Person 类:
public class Person : IdentityUser
{
[Required]
[StringLength(50, ErrorMessage = "First name cannot be longer than 50 characters.")]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
public List<Course> RegisteredCourses { get; set; }
}
这是课程类:
public class Course
{
public int CourseId { get; set; }
public string CourseTitle { get; set; }
public List<Person> Members { get; set; }
}
这里是DbContext类中关系的定义:
modelBuilder.Entity<Course>()
.HasMany(c => c.Members)
.WithMany(p => p.RegisteredCourses)
.Map(m => m.MapLeftKey("CourseId").MapRightKey("Id")
.ToTable("EnrollmentsToCourse"));
在我看来一切都很完美。谁能告诉我我在这里缺少什么?
【问题讨论】:
-
您是否故意不使用虚拟集合来防止更改跟踪?
-
嗨@Noel,你能详细说明一下吗?
标签: c# linq entity-framework many-to-many