Entity framework 4 使用多个edmx的DynamicDataRegisterContext错误
在发布这篇文章之前,我确保阅读了SO提出的所有建议 该应用程序目前有两个项目,一个用于web应用程序,另一个用于实体框架版本4.0。我们正在尝试RSSBus为Quickbooks提供商提供的工具 设置起来很容易。我在所有实体上都加了QB前缀,并生成了QB.tt文件,没有问题。两个edmx文件都位于同一个项目中,使用共享名称空间SMR.Model 当我重建项目以运行它时,global.asax.cs文件抛出了一个错误:Entity framework 4 使用多个edmx的DynamicDataRegisterContext错误,entity-framework-4,global-asax,edmx,Entity Framework 4,Global Asax,Edmx,在发布这篇文章之前,我确保阅读了SO提出的所有建议 该应用程序目前有两个项目,一个用于web应用程序,另一个用于实体框架版本4.0。我们正在尝试RSSBus为Quickbooks提供商提供的工具 设置起来很容易。我在所有实体上都加了QB前缀,并生成了QB.tt文件,没有问题。两个edmx文件都位于同一个项目中,使用共享名称空间SMR.Model 当我重建项目以运行它时,global.asax.cs文件抛出了一个错误: DefaultModel.RegisterContext(typeof(SMR
DefaultModel.RegisterContext(typeof(SMR.Model.SMREntities),
new ContextConfiguration() { ScaffoldAllTables = true });
给出的错误是:
字典中不存在给定的键
描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源
异常详细信息:System.Collections.Generic.KeyNotFoundException:字典中不存在给定的键
源错误:
第36行:公共静态无效注册表RoutsRouteCollection路由
第37行:{
第38行:DefaultModel.RegisterContexttypeofSMR.Model.smrenties,
第39行:新上下文配置{ScaffoldAllTables=true};
第40行:
源文件:C:\all\src\smr\smr.pl.Web\Global.asax.cs行:38
堆栈跟踪:
[KeyNotFoundException:字典中不存在给定的密钥。]
System.Collections.Generic.Dictionary2.get\u ItemTKey+9624829
System.Web.DynamicData.ModelProviders.EFDataModelProvider..ctorObject contextInstance,Func1 contextFactory+800
System.Web.DynamicData.ModelProviders.SchemaCreator.CreateDataModelObject contextInstance,Func1 contextFactory+126
System.Web.DynamicData.MetaModel.RegisterContextFunc1 contextFactory,ContextConfiguration+378
System.Web.DynamicData.MetaModel.RegisterContextType contextType,ContextConfiguration配置+88
C:\all\src\smr\smr.pl.Web\Global.asax.cs中的smr.pl.Web.Global.RegisterRoutesRouteCollection路由:38
smr.pl.Web.Global.Application\u StartObject发送方,事件参数e在C:\all\src\smr\smr.pl.Web\Global.asax.cs:91中
[HttpException 0x80004005:字典中不存在给定的密钥。]
System.Web.HttpApplication Factory.EnsureStartCalledForIntegratedModelHttpContext上下文,HttpApplication app+9170941
System.Web.HttpApplication.RegisterEventSubscriptionSwithisIntPtr appContext、HttpContext上下文、MethodInfo[]处理程序+131
System.Web.HttpApplication.InitSpecialHttpApplication状态,MethodInfo[]处理程序,IntPtr appContext,HttpContext上下文+194
System.Web.HttpApplication Factory.GetSpecialApplicationInstanceIntPtr appContext,HttpContext上下文+339
System.Web.Hosting.PipelineRuntime.InitializeApplicationIntPtr appContext+253
[HttpException 0x80004005:字典中不存在给定的密钥。]
System.Web.HttpRuntime.FirstRequestInitHttpContext上下文+9090044
System.Web.HttpRuntime.EnsureRefirstrequestinitHttpContext上下文+97
System.Web.HttpRuntime.ProcessRequestNotificationPrivateIIS7WorkerRequest wr,HttpContext上下文+256
由于没有什么问题可以解决,我查看了.config文件,看看它们是否有错,并且都检查为ok
<add name="SMREntities" connectionString="metadata=res://*/;provider=System.Data.SqlClient;provider connection string="Data Source=localhost;Initial Catalog=SMR;Persist Security Info=True;User ID=sa;Password=XXX;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient"/>
<add name="RSSQBEntities" connectionString="metadata=res://*/Model.QBOE.csdl|res://*/Model.QBOE.ssdl|res://*/Model.QBOE.msl;provider=System.Data.RSSBus.QuickBooks;provider connection string="Offline=False;Application Id=987654321;Connection Ticket=TGT-000-T_xxxxxxxxxxxxxxxxxxxx;Online Login=ohno"" providerName="System.Data.EntityClient" />
有没有想过是什么导致结构像这样失败的?我终于找到了真正的问题。我首先将两个模型分离到不同的项目中。我面临的问题是元数据被集成到同一个程序集命名空间中。我通过更新res://*/节解决了我的问题
<add name="SMREntities" connectionString="metadata=res://SMR.Model/;provider=System.Data.SqlClient;provider connection string="Data Source=localhost;Initial Catalog=SMR;Persist Security Info=True;User ID=sa;Password=XXX;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient"/>
<add name="RSSQBEntities" connectionString="metadata=res://SMR.QBOE/Model.RSSQBOE.csdl|res://SMR.QBOE/Model.RSSQBOE.ssdl|res://SMR.QBOE/Model.RSSQBOE.msl;provider=System.Data.RSSBus.QuickBooks;provider connection string="Offline=False;Application Id=987654321;Connection Ticket=TGT-000-T_xxxxxxxxxxxxxxxxxxxx;Online Login=ohno"" providerName="System.Data.EntityClient" />
经典的问题不是问题。你也应该接受这个答案。它增加了你在未来问题上获得好答案的机会,并使整个SO社区保持良好状态。