Serialization 使用pocos更新数据库

Serialization 使用pocos更新数据库,serialization,asp.net-web-api,entity-framework-5,Serialization,Asp.net Web Api,Entity Framework 5,使用ASP.NET WebAPI和EF 5.0。我已经创建了一个数据提供者,它将查询数据库,然后将一个对象或对象集合返回给我的客户端,这恰好是一个html5/angularjs应用程序 问题在于更新。比如说,如果我有一门课程,可以有很多学生。所以我有一个课程表和一个学生表,其中有一个fk to StudentId。如果我需要编辑学生,EF对象包含关于学生的所有信息,包括CourseId和Course对象本身 由于这种循环引用,WebAPI在尝试序列化此数据时会呕吐,因此延迟加载被关闭-因此当我得

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

问题在于更新。比如说,如果我有一门课程,可以有很多学生。所以我有一个
课程
表和一个
学生
表,其中有一个fk to StudentId。如果我需要编辑学生,EF对象包含关于学生的所有信息,包括CourseId和Course对象本身

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

然后,当我在客户端更新该学生并将其放回我的WebAPI时,我无法更新DB,因为发生了引用完整性约束冲突


我可以做DTO,但在我走这条路线之前,有没有其他模式可以克服这个问题?关于其他工具或软件包的建议,以简化此过程?

WebApi难以序列化EF对象图,但您应该能够在对象获得有效Id后立即更新实体,即使导航属性为空

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

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

是的,我正是这样做的:(.错误发生在将状态设置为“已修改”,而不是SaveChanges()上)。有趣的是,你说即使导航属性为空,我也应该能够更新。我想知道是否还有其他事情发生……异常表明仍然存在某种关系。学生的导航属性是否用[IgnoreDataMember]修饰?它们不是,但我发现了…你可以在WebApiConfig的注册表中设置
config.Formatters.JsonFormatter.SerializerSettings.NullValueHandling=Newtonsoft.Json.NullValueHandling.Ignore;
,它会忽略空导航属性…太好了!谢谢你指出了正确的方向