2011-11-25 63 views
1

我在WPF应用程序的工作后设置为null,建筑师是实体对象的导航属性反序列化

WPF-> WCF-> DAL

的问题是,当我调用WCF方法,它返回物体。 WCF级别的所有东西都可以正常工作,但在返回对象时,在WCF之后,我的导航属性设置为null。

我正在返回Department类的对象(PO​​CO)对象,其导航属性为Employees。我已经验证了[DataMember]属性,事实并非如此。但是一旦它到达MainUI,其Employees属性就设置为null。

我的导航属性的代码看起来像

感谢

+1

你可以把代码查询 –

+0

它是WCF服务代码?你为什么使用'ToFixupCollection'而不是在单个查询中包含所有的细节?是员工映射关系吗?你能显示你的实体代码吗?你是如何创建WCF客户端的?顺便说一句。你可以检查传输的消息来验证WCF服务是否发送数据(使用[消息记录](http://msdn.microsoft.com/en-us/library/ms730064.aspx))? –

+1

也不要调用'department.FirstOrDefault()'两次。它执行两次数据库查询。你只需要调用一次并使用结果。 –

回答

3

我想这是因为导航性能都懒加载。当你尝试访问它们时,它们不能被加载,因为上下文被丢弃。您应该在加载主属性时急切或显式加载它们。

预先加载:

from d in context.Department.Include("Employees") 
select d; 

显式加载:

department.FirstOrDefault().Employees = employees.ToFixupCollection(); 

var departments = (from d in context.Department 
        select d).ToList(); 
departments.ForEach(e => e.EmployeesReference.Load()); 

编辑问题编辑

的问题可能是行之后

尝试将其更改为:

department.FirstOrDefault().Employees = employees.ToList<Employee>(); 
+0

不好意思,我检查过了,重新检查一下,但没用, –

+0

@MSingh你能发表你的代码吗?这将有很大帮助。注意:如果您在调试模式下检查导航属性,它将显式加载属性。 – Mentoliptus

+0

感谢您的关注,我在查询中添加了一些代码,请确认。谢谢 –