2

我有以下实体框架代码优先模型:

public class Member {

    public int ID { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string City { get; set; }
    public String CardNumber { get; set; }

    //Foreign Key
    public virtual ICollection<Favorite> Favorites { get; set; }

    [NotMapped]
    public List<SelectListItem> FavoriteTypes { get; set; }

    public Member() {
        MembersDB db = new MembersDB();

        FavoriteTypes = new List<SelectListItem>();
        FavoriteTypes.AddRange(db.FavoriteTypes.ToList().Select(f => new SelectListItem { Text = f.Value, Value = f.ID.ToString() }));
    }
}

public class FavoriteType {
    public int ID { get; set; }
    public string Value { get; set; }
}

public class Favorite {
    public int ID { get; set; }
    public String Value { get; set; }

    //Foreign Keys
    public virtual FavoriteType FavoriteType { get; set; }
    public virtual Member Member { get; set; }
}

这会为 FavoriteTypes -> Favorites 创建一个 1-M 关系,为 Member -> Favorites 创建一个 1-M 关系

在我的控制器操作中,我从保存在几页后面的 Session 中检索大部分成员信息,除了下面收集的收藏夹信息。然后我收集 ID 列表和输入值以添加到我的新成员,如下所示:

    [HttpPost]
    public ActionResult AddFavs(List<int> ID, List<string> Value) {
        MembersDB db = new MembersDB();
        Member newMember = (Member)Session["member"];
        if (ID != null && Value != null)
        {
            for (int i = 0; i < ID.Count(); i++)
            {
                int currentID = ID[i];
                var test = new Favorite();
                test.FavoriteType = db.FavoriteTypes.Where(f => f.ID == currentID).FirstOrDefault();
                test.Value = Value[i];
                newMember.Favorites.Add(test);                    
            }
        }

运行此代码时,我在此行收到 NullReference 错误newMember.Favorites.Add(test);

不完全确定为什么,任何帮助将不胜感激。

编辑:在 VS 中进行故障排除时,我能找到的唯一空属性是FavoritesinnewMemberMemberintest

4

1 回答 1

2

ICollection<Favorite> Favoritesnull,因此您无法向其中添加项目。您应该在模型的构造函数中实例化它:

public Member()
{
    Favorites = new List<Favorite>();

    // ...
}

现在它是一个空集合,您可以向其中添加项目。

于 2013-10-25T17:38:51.743 回答