【问题标题】:"Object reference not set to an instance of an object error" when adding an item with Entity Framework Many-To-Many relationship添加具有实体框架多对多关系的项目时,“对象引用未设置为对象错误的实例”
【发布时间】: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


【解决方案1】:

将该行更改为

Course myCourse = _db.Courses.Include(e => e.Members).Single(c => c.CourseId == courseId);

然后检查

if (myCourse.Members == null)
{
    myCourse.Members = new List<Member>();
}

【讨论】:

  • 是的,我错过了检索相关数据,即成员。谢谢!如果有人只有字符串参数的 Include 方法,请不要忘记添加:using System.Data.Entity;
猜你喜欢
  • 1970-01-01
  • 2021-07-10
  • 1970-01-01
  • 2018-04-02
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
相关资源
最近更新 更多