"学生"有一个导航属性"学校"。
public class Student
{
public long Id;
public string Name;
public School MySchool;
}
public class School
{
public long Id;
public string Name;
}
客户端程序传入同一所学校的两个学生实体以更新数据库。两名学生中的Student.MySchool是不同的对象,具有相同的Key.Id 。
如何在一次交易中更新两名学生?
我的想法是将两个学生附加到dbcontext然后将其状态更改为已修改。但是第二次附加失败了错误:附加了类型' School'失败,因为同一类型的另一个实体已具有相同的主键值。
答案 0 :(得分:0)
将MySchoolId
属性添加到Student
并根据MySchoolId
引用设置每个学生的MySchool
属性,然后将MySchool
引用设置为null在将学生添加到上下文之前。
public long MySchoolId { get; set; }
您可能需要检查并查看学校是否已存在于上下文中。如果没有,则将其添加到上下文中,保存上下文,并使用该一个学校实体的最新更新Id
来设置MySchoolId
属性的值。
或者,您可以查询匹配学校的上下文,并将每个学生属性设置为来自上下文或您刚刚创建的实体。