如何使用EF4向EntitySet添加新项

本文关键字:添加 新项 EntitySet 何使用 EF4 | 更新日期: 2023-09-27 17:59:14

我试图通过创建新实例向entityset添加一些新项,并使用AddTo方法添加它,然后我调用SaveChanges()方法来更新我的数据库,但没有添加新的记录代码。

foreach (var newitem in newItemsList)
{
      if (newitem.SomeValue > 0)
      {
          dbcontext.AddToMyEntityType(newitem);
      }
}
dbcontext.SaveChanges();

但当我使用MyEntityType.CreateMyEntityType()方法时,所有新项目都会保存到我的数据库中

foreach (var newitem in newItemsList)
{
      if (newitem.SomeValue > 0)
      {
          MyEntityType _newEntity = MyEntityType.CreateMyEntityType();//I passed the required parameters
          dbcontext.AddToMyEntityType(_newEntity);
      }
}
dbcontext.SaveChanges();

为什么????

我应该使用Create方法还是有其他方法?

编辑

我忘了提到newitem有一个导航属性(父表的外键),我用正确的父ID 设置了这个属性

如何使用EF4向EntitySet添加新项

属性级别的newItem_newEntity之间必须存在差异。CreateMyEntityType(...)不会比new MyEntityType做更多的工作,也不会设置您传入的属性。CreateMyEntityType(...)鼓励为所有必需字段设置属性。也许您设置了newItem中没有设置的必需属性(如字符串)。第一个例子中的SaveChanges实际上抛出了一个异常,因为缺少必需的字段,但您隐藏了这个异常(通过try { ... } catch {}或其他方式)。如果SaveChanges异常通过,请检查调试器。

一个假设。

foreach (var newitem in newItemsList)
{
      if (newitem.SomeValue > 0)
      {
          dbcontext.AddObject("entity set name", newitem);
      }
}
dbcontext.SaveChanges();

var entitySet = dbcontext.CreateObjectSet<item type>();
foreach (var newitem in newItemsList)
{
      if (newitem.SomeValue > 0)
      {
          entitySet.AddObject(newitem);
      }
}
dbcontext.SaveChanges();

在第一部分中,您没有初始化实体集的对象如果你通过做一些类似的事情来初始化entityset的对象,这将起作用

 foreach (var newitem in newItemsList)
 {
  if (newitem.SomeValue > 0)
  {  
      MyEntityType obj = new MyEntityType
      {
       value1 = newitem.somevalue,
       value2 = newitem.someothervalue
      };
      myContext.AddToMyEntityType(obj);
  }
 }
  dbcontext.SaveChanges();

在你的第二部分中,你已经定义了本体集,你想在其中添加新的对象,并通过这个初始化本体的对象

 MyEntityType _newEntity = MyEntityType.CreateMyEntityType();
  myContext.AddToMyEntityType(_newEntity);

您在这里告诉我,将_newEntity添加到我的MyEntityTypeAddToMyEntityType是用于向MyEntityType实体集添加新对象的弃用方法。。