使用两个EDMX文件时出错(一个dbContext,另一个常规EDMX)

时间:2012-05-03 10:31:40

标签: entity-framework entity-framework-4 dbcontext objectcontext

供参考,请参阅this unanswered question。我有完全相同的错误。这与使用错误的Code-First无关。两个EDMX文件(一个使用普通的旧CodeGen,另一个使用dBContext T4代码),两个不同的命名空间,不同的连接字符串等等。尝试访问数据时,DBContext模型会抛出错误。

因此,当访问NameSpace.Models.MyEntities.ObjectSet(dbContext T4模板生成的对象)时,我收到以下错误:

  

无法找到概念模型类型   AnotherNameSpace.Models.MyObjectClass

其中AnotherNameSpace.Models.MyObjectClass指的是不同文件夹/命名空间中完全不同的EDMX。我无法在任何t4生成的文件中的任何地方找到AnotherNameSpace.Models.MyObjectClass的任何引用,等等。这些EDMX文件没有相互复制。实际上,EDMX文件的唯一共同点是它们最终指向同一个数据库(尽管它们不共享连接字符串)。

尝试访问上面的ObjectSet时,会抛出归类为System.ArgumentException的错误:

   at System.Data.Metadata.Edm.MetadataWorkspace.GetEdmSpaceType[T](T objectSpaceType)
   at System.Data.Entity.Internal.InternalContext.UpdateEntitySetMappings()
   at System.Data.Entity.Internal.InternalContext.TryUpdateEntitySetMappingsForType(Type entityType)
   at System.Data.Entity.Internal.InternalContext.UpdateEntitySetMappingsForType(Type entityType)
   at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
   at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
   at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
   at System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider()
   at System.Linq.Queryable.Where[TSource](IQueryable`1 source, Expression`1 predicate)
   at GratisWeb.Areas.App.Controllers.WorkplanController.Index() in B:\eGrATIS\Code\src\GratisWeb\Areas\App\Controllers\WorkplanController.cs:line 30
   at lambda_method(Closure , ControllerBase , Object[] )
   at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
   at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
   at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12()
   at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)

1 个答案:

答案 0 :(得分:0)

解决方案是在两个EDMX中进行两次单独组装,但是很难维护。以下是详细信息:EDMX for legacy code _and_ Code First for new development together in one MVC project