1

我正在开发一个 Web API 应用程序;我正在使用 VS2012 模板自动生成的 EF 5.0 和 POCO 类。延迟加载和代理生成被禁用。

当我的对象被序列化时,我发现导航属性包含在 JSON 输出中,并且值为“null”。

当我的对象被反序列化(即:对于“保存”操作)时,这些导航属性的值不是“null”,而是对象的空值。

下面是一个序列化的例子:

 [{"EmployeeTimeblockId":1,"EmployeeId":1,"DayOfWeek":0, "StartDate":"2012-05-    27T00:00:00", "EndDate":"2012-09- 02T00:00:00", "StartTime":"16:00:00","EndTime":"18:00:00","Notes":"null","Employee":null}]

当我发回这个对象时,“Employee”字段仍然为空,反序列化程序会使用新的 Employee() 实例更改其值。这是一个问题,因为 Entity Framework 显然试图附加这个对象,而我不想要这种行为。

我的解决方法是手动将我的对象导航属性设置为 null,如下所示:

        var uow = new Infrastructure.Database.UnitOfWork();
        var rep = uow.EmployeeTimeblockRepository;
        e.Employee = null;
        rep.Update(e);
        uow.Save();

但这不是一个优雅的解决方案。关于如何在不使用 DTO 的情况下获得干净的反序列化对象的任何建议?

谢谢,尼古拉

4

0 回答 0