没有DTO的Web API:POCO对导航属性具有奇怪的价值

时间:2012-09-28 09:32:31

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

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

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

当我的对象被反序列化时(即:对于“保存”动作),这些导航属性不会使用“null”进行估值,而是使用对象的空istance。

以下是序列化的示例:

 [{"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”字段仍然为null,反序列化器会使用新的Employee()istance更改其值。这是一个问题,因为实体框架显然会尝试附加此对象,我不希望出现这种情况。

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

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

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

谢谢, 尼古拉

0 个答案:

没有答案