为多对多关系添加项目时,我收到此错误
类型' System.NullReferenceException'的例外情况发生在gEchoLu.dll但未在用户代码中处理
没有进一步的细节。
以下是抛出异常的代码:
protected void btn_AddMembers_Click(object sender, EventArgs e)
{
gEchoLuDBContext _db = new gEchoLuDBContext();
int wallId = Convert.ToInt32(grd_Walls.SelectedDataKey.Value);
DiscussionWall selectedWall = _db.DiscussionWalls.Single(dw => dw.WallId == wallId);
foreach (ListItem item in cbList_AllMembers.Items)
{
if (item.Selected)//if the checkbox item (i.e., user) is selected
{
Person selectedPerson = _db.People.Single(p => p.Id == item.Value.ToString());
//then retrieve the user from db
selectedWall.Members.Add(selectedPerson);//**this line throws the error**
//add user to the selected wall
}
}
_db.SaveChanges();
BindWallMembers();
}
在上面的代码中,当我调试它时,我发现没有任何实例(selectedWall
和selectedPerson
)为空。以下是相关类的相关部分及其之间的关系:
public class DiscussionWall
{
[Key]
public int WallId { get; set; }
public List<Person> Members { get; set; }
}
[Table("AspNetUsers")]
public class Person : IdentityUser
{
public List<Course> RegisteredCourses { get; set; }
public List<DiscussionWall> AttendedDiscussionWalls { get; set; }
}
流利的api代码:
modelBuilder.Entity<DiscussionWall>()
.HasMany(dw => dw.Members)
.WithMany(p => p.AttendedDiscussionWalls)
.Map(m => m.MapLeftKey("WallId").MapRightKey("Id")
.ToTable("EnrollmentsToDiscussionWalls"));
有没有人知道我的逻辑和代码有什么问题?
答案 0 :(得分:1)
看起来DiscussionWall.Members
为空。它没有被您的代码初始化为任何内容。尝试:
private List<Person> _members;
public List<Person> Members
{
get { return _members ?? (_members = new List<Person>()); }
set { _members = value; }
}
另请参阅:Why is my Entity Framework Code First proxy collection null and why can't I set it?