从 Entity Framework 数据库优先移动到代码优先会给 ObjectQuery 带来问题,并且不会正确地预加载

Move From Entity Framework Database First to Code First gives problems for ObjectQuery and will Not Eager Load properly

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

-Entity Framework 4

-Code First 方法

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

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

我们基于 Entity Framework 数据库优先代码的旧代码曾经有如下代码:

 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”);

但是,由于我们改用代码优先方法,前面提到的post会给出以下错误:

Object reference not set to an instance of an object.

这似乎是我们从 Entity Framework 数据库优先代码迁移到代码优先

时出现的某种问题

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

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

但是,与评论相关的 Post 实体(即评论集合的导航 属性)将不会 "Eager Loaded",这是有问题的,因为 till 会抛出以下错误:

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

有人可以告诉我我们如何修改代码以使其适用于 Entity Framework Code First 方法吗?

参考:How can i convert a DBQuery<T> to an ObjectQuery<T>?

@ladislav-mrnka 状态:“

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

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