【问题标题】:Creating object with related objects in Entity Framework 4.1在 Entity Framework 4.1 中创建具有相关对象的对象
【发布时间】:2011-12-23 23:45:12
【问题描述】:

我有以下数据库表/EF 对象

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

}

public class TransactionItems
{
    //some properties
}

我需要做的是,为它的 Items 属性创建一个新的事务实例以及几个 TransactionItems 实例,并将所有这些都保存到我的数据库中

我尝试了以下方法:

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

然后在 foreach 循环中,我遍历一个集合并为每个成员创建一个新的 TransactionItem 并尝试将其添加到 trans 对象 Item Collection

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 添加到我的 Transaction 对象的 Item 集合时,我收到了一个空引用异常。我做错了什么?

【问题讨论】:

    标签: c# .net entity-framework entity-framework-4.1


    【解决方案1】:

    您需要在构造函数中初始化属性以保存集合实例:

    Items = new HashSet<TransactionItems>();
    

    【讨论】:

    • 如果您以这种方式定义它,请注意您的 EqualsGetHashCode 运算符专门考虑主键/唯一约束属性,而不是其他属性。
    • @MerlynMorgan-Graham:或者只是使用引用相等。
    【解决方案2】:

    您是否曾经在 Transaction 的构造函数或您的实际代码中初始化 TransactionItems

    public class Transaction
    {
        public Transaction()
        {
            Items = new List<TransactionItems>();
        }
    
        //some other properties
        public ICollection<TransactionItems> Items {get; set;}
    }
    

    或者更少(除非您也执行上述操作):

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多