导航属性上的空引用异常

时间:2013-10-05 20:43:13

标签: c# asp.net-mvc entity-framework nullreferenceexception

有人可以提出以下问题的原因吗?我的代码正在破线

integerList.Integers.Add(integer);

带有错误消息

Object reference not set to an instance of an object.

IntegerList.Integers为null,我怀疑是原因,但解决方案是什么?我初始化变量时是否必须设置IntegerList.Integers值,因此它永远不为空?

模型

public class IntegerList
{
    public int IntegerListID { get; set; }
    public string Direction { get; set; }
    public long Performance { get; set; }
    public virtual ICollection<Integer> Integers { get; set; }
}

public class Integer
{
    public int IntegerID { get; set; }
    public int IntegerValue { get; set; }
    public int IntegerListID { get; set; }
    public virtual IntegerList IntegerList { get; set; }
}

视图模型

public class IntegerViewModel
{
    [UIHint("Integers")]
    public IntegerValueViewModel IntegerValues { get; set; }
    public string Direction { get; set; }
}

public class IntegerValueViewModel
{
    public ICollection<int> IntegerValue { get; set; }
}   

控制器

    [HttpPost]
    public ActionResult Index(IntegerViewModel integerViewModel)
    {
        if (ModelState.IsValid)
        {
            var integerList = new IntegerList
            {
                Direction = integerViewModel.Direction
            };

            foreach (var item in integerViewModel.IntegerValues.IntegerValue)
            {
                var integer = new Integer { IntegerValue = item };
                integerList.Integers.Add(integer);
            }

2 个答案:

答案 0 :(得分:4)

因为Integers属性未初始化且为null。您试图在 null 上调用Add方法,这会给您一个错误

解决方案:IntegerList类构造函数中初始化属性

public class IntegerList
{
    public int IntegerListID { get; set; }
    public string Direction { get; set; }
    public long Performance { get; set; }
    public virtual ICollection<Integer> Integers { get; set; }

    public IntegerList()
    {
      Integers =new List<Integer>();
    }
}

答案 1 :(得分:0)

当你这样做时

var integerList = new IntegerList
            {
                Direction = integerViewModel.Direction
            };

关联的Integers未初始化,您可以在IntegerList contsctructor中初始化它。或者执行以下操作

var integerList = new IntegerList
                {
                    Direction = integerViewModel.Direction,
                    Integers=new List<Integer>()

                };