2013-10-05 21 views
0

任何人都可以提出以下問題的原因嗎?我的代碼就行了導航屬性上的空引用異常

integerList.Integers.Add(integer); 

中斷與錯誤信息

Object reference not set to an instance of an object. 

IntegerList.Integers爲空,我懷疑是原因,但如何解決?當我初始化變量時,是否必須設置IntegerList.Integers值,使其不會爲null?

模型

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); 
      } 
+0

幾乎所有的'NullReferenceException'都是一樣的。請參閱「[什麼是.NET中的NullReferenceException?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-in-net)」的一些提示。 –

回答

4

由於Integers屬性未初始化並且爲空。你試圖調用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>(); 
    } 
} 
+0

小心實例化子對象爲「新列表」。如果您在構造函數中將'Integers'子集合初始化爲'new List ',那麼當您希望在子屬性'Integers'上執行'.Where'子句時,您將從所有的子類'Integers' Db表示該父記錄,然後將應用'.Where'子句。如果孩子名單很大,那麼這會對性能產生顯着影響。 – Gwasshoppa

0

當你

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

相關的整數未初始化,您可以在IntegerList contstructor中初始化它。或者執行以下操作:

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

       };