通过WCF发送实体框架实体:如何防止导航字段的序列化?

mr *_*ose 3 wcf serialization entity-framework

在通过WCF发送具有导航属性的Entity Framework生成的实体时遇到问题.我有一个Securities用于存储财务数据的数据库和其中的两个表:

Stock : Id, Symbol, CompanyName, ExchangeName
Option: Id, StockId, OptionType, Strike

我为这个数据库创建了一个Entity Framework模型.然后我创建了WCF服务,它将生成的StockOptionEF实体公开给客户端.

我生成的实体Stock具有导航属性EntityCollection<Option> Options.当尝试将Stock实体从WCF服务返回到客户端时,我得到SerializationException:WCF无法序列化Options导航属性,因为数据库连接已经关闭.

我可以Options.Load()在打开数据库连接时调用方法来填充Options属性,但如果我不想为Stock实体加载完整的对象图,我该怎么办?

cad*_*ll0 13

我和这个人争吵了一段时间.

首先,我把懒人装上了.但是我的对象图中的循环仍然存在问题.
然后,我[DataContract(IsReference = true)]在所有实体上添加了标签.这很有效,但我仍然对非规范化数据库有很多性能问题.最后,我分解并制作了dtos,我使用AutoMapper来填充它们.

我的一个同事告诉我从一开始就这样做,我应该听听他的意见.帮自己一个忙,不要犯同样的错误.

编辑
我忘了提到我有问题反序列化具有类型属性的实体ICollection<T>.这些将反序列化为数组.不知怎么T[]实现ICollection<T>,但AddRemove会抛出异常.这是使用DTO的另一个原因.