从实体框架数据库优先移动到代码优先会给 ObjectQuery 带来问题,并且不会正确加载



我们公司有一个软件应用程序,它使用

-实体框架 4

-代码优先方法

应用程序过去基于实体框架数据库优先代码,但是,我们将其更改为开始使用代码优先方法。

我们有一些问题类似于Alex D James博客文章中提到的问题:https://blogs.msdn.microsoft.com/alexj/2009/06/02/tip-22-how-to-make-include-really-include/

我们基于实体框架数据库的旧代码 第一个代码过去具有如下代码:

var results =
((from post in ctx.Posts
from blog in post.Blogs
where blog.Owner.EmailAddress == “alexj@microsoft.com”
select post) as ObjectQuery<Post>).Include(“Comments”);

但是,由于我们更改为代码优先方法,上述帖子将给出以下错误:

Object reference not set to an instance of an object.

这似乎是当我们从实体框架数据库第一个代码移动到代码优先时出现的某种问题

我们将代码修改为如下所示:

var results =
(from post in ctx.Posts.Include(“Comments”)
from blog in post.Blogs
where blog.Owner.EmailAddress == “alexj@microsoft.com”
select post);

但是,与评论关联的 Post 实体(即评论集合的导航属性(不会是"预先加载",这是有问题的,因为 till 会引发以下错误:

The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

有人可以告诉我如何修改代码以使其适用于实体框架代码优先方法吗?

参考:如何将 DBQuery转换为 ObjectQuery

@ladislav-mrnka说:">

DbQuery 包含 Include 方法,因此无需转换为 ObjectQuery。无法从 DbQuery 实例访问 ObjectQuery - 它包装在内部类型 InternalQuery 中,并且未定义转换运算符。

顺便说一句,当您使用System.Data.Entity和reference CTP5添加时,您将能够在IQueryable上调用Include! ">

最新更新