从 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!
“
我们公司有一个软件应用程序使用
-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! “