2011-11-07 142 views
0

我有以下的数据库表/ EF对象与实体框架的相关对象创建对象4.1

public class Transaction 
{ 
    //some other properties 
    public ICollection<TransactionItems> Items {get; set;} 

} 

public class TransactionItems 
{ 
    //some properties 
} 

,我需要做的是,用TransactionItems其项目的多个实例一起创建事务的一个新实例财产和所有这些保存到我的DB

我曾尝试以下:

Transaction trans = new Transaction(); 
//set its properties 

然后在foreach循环中,我循环通过收集和肌酸g下每个成员的新TransactionItem,并试图将其添加到跨对象项目集合

foreach(var item in myCollection) 
{ 

    TransactionItem newItem = new TransactionItem(); 
    //set its properties 

    //add it to the tran Item collection 
    tran.TransactionItems.Add(newItem);//getting null reference here... 

} 

我得到一个空引用异常,当我尝试将transactionITem添加到我的交易对象的项目集合。我究竟做错了什么?

回答

2

需要初始化保持在构造一个集合实例的属性:

Items = new HashSet<TransactionItems>(); 
+0

如果你把它定义这种方式要小心,你的'Equals'和'GetHashCode'运营商具体采取的主键/唯一约束属性,而不是其他属性。 –

+1

@ MerlynMorgan-Graham:或者只是使用引用相等。 – SLaks

1

你有没有初始化在构造函数中TransactionItemsTransaction或在您的实际代码?

public class Transaction 
{ 
    public Transaction() 
    { 
     Items = new List<TransactionItems>(); 
    } 

    //some other properties 
    public ICollection<TransactionItems> Items {get; set;} 
} 

或者更少preferrably(除非你也做了以上):

Transaction trans = new Transaction() 
{ 
    Items = myCollection.Select(
     item => new TransactionItem 
     { 
      // set its properties 
     }) 
     .ToList(); 
}; 
相关问题