实体框架5 dbContext对象水合作用

时间:2014-03-13 19:33:42

标签: c# wcf caching entity-framework-5

我们正在尝试编写一个WCF缓存服务,该服务使用ef5从数据库中获取数据。

问题在于序列化一个非常简单的模型。

考虑一下。

我们在db中有5000个产品。每个产品都有一个相关的制造商,假设有2个制造商。

对于我们的缓存,我们关闭代理创建,以便在序列化时我们不会获取数据库中的每个对象。然后我们写

dbCtx.Configuration.ProxyCreationEnabled = false; var products = dbCtx.Products.Include("Manufacturers").ToDictionary(x=>x.PartNo);

这将使所有5000种产品进入我们的缓存。

然后我们有一个wcf方法

Product GetProduct(string PartNo);

如果我们调用GetProduct(" MyPart"),返回的对象就是我们想要的部分,两个制造商中的一个很好。

此处是捕获相关制造商具有返回产品的导航属性。 挂掉导航财产的还有2500种其他产品。

这会产生一个非常大的序列化对象。

似乎正在发生什么。 dbCtx从数据库中检索了5000个产品。 一旦它创建了所有5000个产品并将它们放在上下文中,它就会创建制造商。在制造商的创建过程中,它发现了产品导航属性,并用它的本地环境中的所有产品填充它。如果ProxyCreationEnabled为true,则它会将代理对象放在导航属性上。我们希望它做的是忽略它已经知道的对象,并提供一个null或空集合,以便我们可以按照我们想要的顺序进行序列化。

我在EF 4周围做了一些关于这个区域的工作并记住,当附加一个分离的对象时,你可以进行一个调用,以便你的分离对象与上下文中的所有其他对象相关联。

我认为这个调用是由dbcontext代表我们做的,我想阻止它。

关于在哪里寻找更多信息或如何阻止它的任何建议都非常有帮助。

0 个答案:

没有答案