【发布时间】:2012-05-17 18:59:42
【问题描述】:
我正在使用带有 DI (Ninject) 的通用存储库模式和实体框架的 ASP.NET MVC3。
我有一个其他站点连接到它的主项目(类库)。主项目有它自己的存储库和自己的上下文(它是自己的 .edmx 文件),它们连接到公共表。每个站点都有自己的存储库,这些存储库连接到它自己的表。我的问题是,当我尝试运行将站点表与主项目表结合起来的复杂 linq 查询时,我得到“同一查询中的不同上下文”异常。拜托,你能告诉我我做错了什么吗?
异常类型:
系统不支持的异常
异常信息:
指定的 LINQ 表达式包含对以下查询的引用 与不同的上下文相关联。
这是堆栈跟踪:
System.Data.Objects.ELinq.Funcletizer.FuncletizingVisitor.InlineObjectQuery(ObjectQuery inlineQuery,类型表达式类型)在 System.Data.Objects.ELinq.Funcletizer.FuncletizingVisitor.InlineValue(表达式 表达式,布尔 recompileOnChange) 在 System.Data.Objects.ELinq.Funcletizer.FuncletizingVisitor.Visit(表达式 exp)在 System.Linq.Expressions.EntityExpressionVisitor.VisitExpressionList(ReadOnlyCollection'1 原始)在 System.Linq.Expressions.EntityExpressionVisitor.VisitMethodCall(MethodCallExpression m) 在 System.Linq.Expressions.EntityExpressionVisitor.Visit(表达式 exp) 在 System.Data.Objects.ELinq.Funcletizer.FuncletizingVisitor.Visit(表达式 exp)在 System.Linq.Expressions.EntityExpressionVisitor.VisitLambda(LambdaExpression λ) 在 System.Linq.Expressions.EntityExpressionVisitor.Visit(表达式 exp) 在 System.Data.Objects.ELinq.Funcletizer.FuncletizingVisitor.Visit(表达式 exp)在 System.Linq.Expressions.EntityExpressionVisitor.VisitUnary(UnaryExpression u) 在 System.Linq.Expressions.EntityExpressionVisitor.Visit(表达式 exp) 在 System.Data.Objects.ELinq.Funcletizer.FuncletizingVisitor.Visit(表达式 exp)在 System.Linq.Expressions.EntityExpressionVisitor.VisitExpressionList(ReadOnlyCollection'1 原始)在 System.Linq.Expressions.EntityExpressionVisitor.VisitMethodCall(MethodCallExpression m) 在 System.Linq.Expressions.EntityExpressionVisitor.Visit(表达式 exp) 在 System.Data.Objects.ELinq.Funcletizer.FuncletizingVisitor.Visit(表达式 exp) 在 System.Data.Objects.ELinq.Funcletizer.Funcletize(表达式 表达式,Func'1& recompileRequired) 在 System.Data.Objects.ELinq.ExpressionConverter..ctor(Funcletizer funcletizer,表达式表达式)在 System.Data.Objects.ELinq.ELinqQueryState.CreateExpressionConverter() 在 System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable'1 forMergeOption) 在 System.Data.Objects.ObjectQuery'1.GetResults(Nullable'1 forMergeOption) 在 System.Data.Objects.ObjectQuery'1.System.Collections.Generic.IEnumerable.GetEnumerator() 在 System.Data.Entity.Internal.Linq.InternalQuery'1.GetEnumerator()
在 System.Data.Entity.Infrastructure.DbQuery'1.System.Collections.Generic.IEnumerable.GetEnumerator() 在 System.Linq.SystemCore_EnumerableDebugView'1.get_Items()
【问题讨论】:
-
请解释一下“一个其他站点连接到它的主项目”和“代码喊他不能使用两个不同的dbcontext”是什么意思。是否抛出异常?如果是这样,请发布消息、异常类型和堆栈跟踪。
-
@Steven:谢谢我编辑了我的问题。
-
只有先将不同上下文的数据转换为 IEnumerable,才能合并它们。
标签: .net asp.net-mvc-3 entity-framework dependency-injection ninject