Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# “某种方式”;“施工前”;使用实体框架6进行查询_C#_Entity Framework_Entity Framework 6_Dbcontext - Fatal编程技术网

C# “某种方式”;“施工前”;使用实体框架6进行查询

C# “某种方式”;“施工前”;使用实体框架6进行查询,c#,entity-framework,entity-framework-6,dbcontext,C#,Entity Framework,Entity Framework 6,Dbcontext,我正在使用EntityFramework6开发一个数据库应用程序。在一个地方,我需要根据用户输入组装一个查询,然后将该查询返回给调用者。我不能自己运行查询并返回结果集,因为调用方需要存储查询,以便在UI刷新后再次运行。我也不能返回表示已组装查询的IQueryable,因为这只对它所针对的上下文有效 我已经研究过如何使用CompiledQuery.Compile,但这不适用于Entity Framework 6中的DbContext基类。我需要做一些类似的事情,预编译/预组装/预构造一个查询,该查

我正在使用EntityFramework6开发一个数据库应用程序。在一个地方,我需要根据用户输入组装一个查询,然后将该查询返回给调用者。我不能自己运行查询并返回结果集,因为调用方需要存储查询,以便在UI刷新后再次运行。我也不能返回表示已组装查询的
IQueryable
,因为这只对它所针对的上下文有效

我已经研究过如何使用
CompiledQuery.Compile
,但这不适用于Entity Framework 6中的
DbContext
基类。我需要做一些类似的事情,预编译/预组装/预构造一个查询,该查询可以在以后返回并再次运行,但可以与Entity Framework 6一起使用。我不在乎查询是否以委托的形式返回,我只需要一些独立于任何特定上下文实例来表示查询的东西


如何使用Entity Framework 6预构造并返回查询,以便可以针对不同的上下文实例多次运行查询?

我最后做的是创建一个委托类型来封装查询,它将
MyDatabaseContext
作为参数,并返回一个
List
,其中
T
是我要查询的特定实体的类型


因此,现在创建查询的函数可以简单地返回一个函数,并且每当需要运行查询时,查询都被简单地作为函数调用,并将上下文实例作为参数传递给它。函数从给定的上下文返回一个实体列表,该列表适用于它所表示的查询。

我最后做的是创建一个委托类型来封装查询,它将
MyDatabaseContext
作为参数,并返回一个
List
,其中
T
是我要查询的特定实体的类型


因此,现在创建查询的函数可以简单地返回一个函数,并且每当需要运行查询时,查询都被简单地作为函数调用,并将上下文实例作为参数传递给它。该函数从给定上下文返回一个实体列表,该列表适用于它所表示的查询。

预编译EF4可以执行一次查询,然后计算并缓存查询。我不认为会有一个上下文无关的解决方案-您的上下文包含映射信息,使查询计算成为可能。所有查询都由每个应用程序域的实体框架缓存。不管你有什么背景,有多少。。。在引擎确定它不应该被缓存或者应用程序域结束之前,它将被缓存并不重要。实际上,我正在寻找一种方法来构造一个查询并从函数返回它,然后在指定的上下文中执行它。所有可能的上下文是否共享一个公共类型?然后可以使用lambda返回。@NetMage它们都是同一上下文类的实例。我想要的是返回一个针对
MyDatabaseContext
运行的查询,然后当我加载UI时,我说
使用(MyDatabaseContext=new MyDatabaseContext())
并使用查询加载UI的内容,然后在刷新UI时,我想再次说
使用(MyDatabaseContext=new MyDatabaseContext())
并使用与以前相同的查询加载更新后的内容(我无法在刷新时再次重建查询,因为查询是由对话框构造的,该对话框早已消失,对调用方来说是不透明的).EF4之前的预编译可用于执行查询一次-然后计算并缓存查询。不过,我认为不会有上下文无关的解决方案-您的上下文包含使查询计算成为可能的映射信息。所有查询都由Entity Framework按每个应用程序域缓存。dbcontext是什么并不重要你有,有多少…等等。它将被缓存,直到引擎确定它不应该被缓存,或者你的应用程序域结束。我不想专门缓存查询。实际上,我在寻找一种方法来构造查询并从函数返回它,然后在指定的上下文中执行它。我不确定一个查询是否有意义一个上下文的NDependent。所有可能的上下文都共享一个公共类型吗?然后你可以使用lambda返回。@NetMage它们都是同一个上下文类的实例。我想要的是返回一个设计为针对
MyDatabaseContext
运行的查询,然后当我加载UI时,我说
使用(MyDatabaseContext=new MyDatabaseContext())
并使用查询加载UI的内容,然后在稍后刷新UI时,我想再次说
使用(MyDatabaseContext=new MyDatabaseContext())
并使用与之前相同的查询加载更新的内容(我无法在刷新时再次重建查询,因为查询是由对话框构造的,该对话框早已消失,对调用方来说是不透明的)。