使用pocos更新数据库

时间:2013-07-12 19:06:59

标签: serialization asp.net-web-api entity-framework-5

使用ASP.NET WebAPI和EF 5.0。我创建了一个数据提供程序,它将查询数据库,然后将对象或对象集合返回给我的客户端,这恰好是一个html5 / angularjs应用程序。

问题在于更新。例如,如果我有一个课程,可以有很多学生。所以我有一个Course表和一个带有fk到StudentId的Student表。如果我需要编辑学生,EF对象包含学生的所有内容,包括CourseId和Course对象本身。

由于这个循环引用,WebAPI在尝试序列化这些数据时会呕吐,因此延迟加载是关闭的 - 所以当我得到我的学生poco时,课程为空。

然后,当我在客户端更新该学生,然后将其返回到我的WebAPI时,由于A referential integrity constraint violation occurred,我无法更新数据库。

我可以制作DTO,但在我走这条路线之前还有其他模式我应该考虑克服这个问题吗?有关其他工具或软件包的建议可以简化这个吗?

1 个答案:

答案 0 :(得分:1)

WebApi努力序列化EF对象图,但即使没有导航属性,只要您的对象获得有效ID ,您就应该能够更新实体。

通过将状态设置为已修改,确保将其正确附加到上下文:

public void Update(DbContext context, User user)
{
    context.Entry(user).State = EntityState.Modified;
    context.SaveChanges();
}