我发现了这个问题的多个帖子,但是我的问题没什么不同,显示的错误与我的方案完全匹配。
我在数据库下面有两个不同的模式。例如PreSchool.Students
& School.Students
。根据我们的要求,Students
表的休息是相同的,包括主键。
现在在我的代码中,我正在使用以下代码更新'PreSchool.Students'的记录:
var wouldBeUpdatedStudent = await context.Students
.FindAsync(student.StudentIdentity).ConfigureAwait(false);
wouldBeUpdatedStudent = student; //updated student object
context.Entry(wouldBeUpdatedStudent).State = EntityState.Modified; // This line throws error
var result = await context.SaveChangesAsync().ConfigureAwait(false);
在OnModelCreating
下,我明确设置tableName
&每个实体SchemaName
。通过这个,我期待每当我改变实体/模型状态时,它应该根据OnModelCreating
下的设置捕获正确的表。然而,这种情况并没有发生,并引发异常。
如果没有级联到学生实体,我尝试使用
context.Students.AsNoTracking()
。但是,有一些级联/子实体也是相同的DDL。例如context.Student.Exams
答案 0 :(得分:0)
逻辑上我没有得到答案,给出了正确的解释 - 修正了这个错误。但是This answer解决了我的问题。我观察到的另一个问题是解决方案是,如果新对象与每个实体底层数据库具有完全相同的值,则它不会更新表。
e.g。
context.Set<Student>().AddOrUpdate(wouldBeUpdatedStudent);
result = await context.SaveChangesAsync().ConfigureAwait(false);
原因我不能使用
AsNoTracking()
因为我有嵌套的实体,这些实体在其他模式中是相同的。因此,即使我在顶级实体中使用AsNoTracking()
,我也会在子级别上获得相同的错误。 与我在问题中提到的相同。