我正在开发一个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的情况下获得干净的反序列化对象的任何建议?
谢谢, 尼古拉