【发布时间】:2017-11-22 16:46:48
【问题描述】:
我有以下情况,我必须做一些事前检查,并据此决定grade 对象是否将使用修改后的子/子对象或新的子/子对象进行更新。
当Students 列表中只有一个student 和studentIdentity = 0 时,以下情况非常有效,但是如果列表中有多个Students(带有studentIdentity = 0)应该添加和设置EntityState.Added 然后它无法将上下文保存回数据库。
上下文类:
public virtual void SetAdded(object entity)
{
Entry(entity).State = EntityState.Added;
}
public virtual void SetModified(object entity)
{
Entry(entity).State = EntityState.Modified;
}
存储库类:
if (grade.Teachers.IsNotNull() && grade.Teachers.Any())
{
grade.Teachers.ForEach(i => SchoolContext.SetModified(i));
}
//Add or update Students
if (grade.Students.IsNotNull() && grade.Students.Any())
{
grade.Students.ForEach(s =>
{
if (s.StudentIdentity == 0) //Works well if only one with Identity = 0 , if goes thru this multiple times, fails
{
SchoolContext.SetAdded(s);
}
else
{
SchoolContext.SetModified(s);
}
});
}
results = await StudentContext.SaveChangesAsync().ConfigureAwait(false);
得到以下异常:
存储更新、插入或删除语句影响了意外数量的行 (0)。自加载实体后,实体可能已被修改或删除。
在处理多个新添加时需要注意什么?
【问题讨论】:
-
什么是
SetAdded和SetModified?分享该代码。
标签: c# .net sql-server entity-framework entity-framework-6