我尝试通过创建新实例并使用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设置了这个属性
答案 0 :(得分:1)
在第一部分中,您没有初始化实体集的对象 如果你通过做这样的事情
来初始化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();
在你的seceod部分中,你已经确定了你想要添加新对象的enititySet,并且通过这个来初始化entiity的对象
MyEntityType _newEntity = MyEntityType.CreateMyEntityType();
myContext.AddToMyEntityType(_newEntity);
这里你要告诉我将_newEntity添加到我的MyEntityType中 AddToMyEntityType是一个用于向MyEntityType实体集添加新对象的depreceated方法..
答案 1 :(得分:1)
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();
答案 2 :(得分:1)
属性级别newItem
和_newEntity
之间必须存在差异。 CreateMyEntityType(...)
不会比new MyEntityType
更多,并设置您传入的属性。CreateMyEntityType(...)
鼓励为所有必填字段设置属性。也许你设置了一个未在newItem
中设置的必需属性(如字符串)。您的第一个示例中的SaveChanges
实际上会抛出异常,因为缺少必填字段,但您隐藏了此异常(通过try { ... } catch {}
或其他内容)。如果SaveChanges
毫无例外地通过,请检入调试器。
一个假设。