实体框架:使用相同密钥的相关实体更新2个实体

时间:2014-04-23 21:05:28

标签: entity-framework

"学生"有一个导航属性"学校"。

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'失败,因为同一类型的另一个实体已具有相同的主键值。

1 个答案:

答案 0 :(得分:0)

MySchoolId属性添加到Student并根据MySchoolId引用设置每个学生的MySchool属性,然后将MySchool引用设置为null在将学生添加到上下文之前。

public long MySchoolId { get; set; }

您可能需要检查并查看学校是否已存在于上下文中。如果没有,则将其添加到上下文中,保存上下文,并使用该一个学校实体的最新更新Id来设置MySchoolId属性的值。

或者,您可以查询匹配学校的上下文,并将每个学生属性设置为来自上下文或您刚刚创建的实体。