【发布时间】:2011-12-31 17:33:48
【问题描述】:
我有一个 MVC3 项目,但遇到了问题。我有一个 Create 控制器,它将我的 POCO 对象之一作为参数。我像这样将此对象添加到数据库中:
entity = dbSet.Add(entity);
此方法返回后,我想使用对象的延迟加载功能。不幸的是,该对象不是 EntityFramework 生成的代理对象......有没有办法以某种方式解决这个问题?
谢谢你, 弗里兹
【问题讨论】:
-
您在使用创建控制器时是否使用 POCO 代理?据我所知,您不能混合使用 POCO 和 POCO 代理,因为实体框架和 POCO 代理的要求之一是将 ObjectContextOptions.ProxyCreationEnabled 设置为 true,这可以在整个 ObjectContext 中启用代理。这是一个很好的链接:msdn.microsoft.com/en-us/library/dd468057.aspx.
-
MVC3 项目完全不知道实体框架,它引用了模型项目(POCO 对象)和 BAL(存储库访问)。只要我使用从数据库中查询的对象,延迟加载在项目的各个级别都非常有效。基本问题是我可以在 MVC3 项目中创建一个对象并将其传递给我的 BAL,该 BAL 将其保存并将其适当地附加到上下文中……但我留下了对 POCO 对象而不是代理对象的引用可以利用延迟加载。
-
啊,明白了。如果您向 BAL 发送信息并修改 BAL 以使用 ObjectContext.CreateObject(...),然后返回结果对象,只要满足所有代理规则,该对象就应该是 POCO 代理。问题是您使用的 entity = dbSet.Add(entity) 不会创建 POCO 代理对象。
-
谢谢乔希。我当前的解决方案类似,我的存储库采用 POCO 对象,调用 dbset.Generate(),然后将我的 POCO 对象中的所有字段映射到新的 PROXY 对象并切换引用。这看起来很不雅。有没有办法获取一个附加的 POCO 对象并获取它的代理表示?
-
不幸的是,据我所知,不是自动魔术。您必须边做边翻译。
标签: asp.net-mvc-3 entity-framework proxy poco