4

作为参考,请参阅这个未回答的问题。我有完全相同的错误。它与错误地使用 Code-First 无关。两个 EDMX 文件(一个使用普通的旧 CodeGen,另一个使用 dBContext T4 代码生成)、两个不同的命名空间、不同的连接字符串等。你明白了。尝试访问数据时,DBContext 模型会引发错误。

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

找不到 的概念模型类型 AnotherNameSpace.Models.MyObjectClass

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

当尝试访问上面的 ObjectSet 时,它会抛出分类为 a 的错误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)
4

1 回答 1

0

解决方案是在两个 EDMX 中进行两个单独的组装,但维护起来非常困难。以下是详细信息:EDMX 用于遗留代码 _and_ Code First 用于在一个 MVC 项目中一起进行新开发

于 2013-05-30T19:44:55.420 回答