Entity framework 实体框架4+;自跟踪实体&x2B;ASP.NET动态数据=错误

Entity framework 实体框架4+;自跟踪实体&x2B;ASP.NET动态数据=错误,entity-framework,.net-4.0,dynamic-data,Entity Framework,.net 4.0,Dynamic Data,我正在使用EF4(VS2010 RC)中的自跟踪实体codegen选项,并尝试使用动态数据构建一个快速而肮脏的网站进行编辑。实体、数据上下文和EDMX文件都在单独的程序集中,当我调用代码中的所有内容时,该模型运行良好。但当我尝试将其用于动态数据时,一下子我就失败了: 找不到“Core.Recording”的CLR类型。 位于System.Data.Metadata.Edm.MetadataWorkspace.GetObjectSpaceType(StructuralType edmSpaceTy

我正在使用EF4(VS2010 RC)中的自跟踪实体codegen选项,并尝试使用动态数据构建一个快速而肮脏的网站进行编辑。实体、数据上下文和EDMX文件都在单独的程序集中,当我调用代码中的所有内容时,该模型运行良好。但当我尝试将其用于动态数据时,一下子我就失败了:

找不到“Core.Recording”的CLR类型。 位于System.Data.Metadata.Edm.MetadataWorkspace.GetObjectSpaceType(StructuralType edmSpaceType) 位于System.Web.DynamicData.ModelProviders.EFDataModelProvider.GetClrType(EntityType EntityType) 位于System.Web.dynamicata.ModelProviders.EFDataModelProvider.CreateTableProvider(EntitySet-EntitySet,EntityType-EntityType) 位于System.Web.dynamicata.ModelProviders.EFDataModelProvider..ctor(对象contextInstance,Func
1 contextFactory)
位于System.Web.DynamicData.ModelProviders.SchemaCreator.CreateDataModel(对象contextInstance,Func
1 contextFactory) 位于System.Web.DynamicData.MetaModel.RegisterContext(Func`1 contextFactory,ContextConfiguration) 在D:\SimpleAdmin\Global.asax.cs:第32行的SimpleAdmin.Global.RegisterRoutes(RouteCollection路由)处 在D:\SimpleAdmin\Global.asax.cs中的SimpleAdmin.Global.Application\u启动(对象发送方,事件参数e):第61行

RegisterRoutes如下所示:

DefaultModel.RegisterContext((() =>  new DataContext.Entities()), new ContextConfiguration() { ScaffoldAllTables = true });
<add name="Entities" connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;provider=System.Data.SqlClient;provider connection string="Data Source=xxxxxxxxxx;Initial Catalog=MyDB;Persist Security Info=True;User ID=xxxx;Password=xxxxxxx;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient"/> 
上下文上的默认构造函数已修改为使用my连接字符串,如下所示:

DefaultModel.RegisterContext((() =>  new DataContext.Entities()), new ContextConfiguration() { ScaffoldAllTables = true });
<add name="Entities" connectionString="metadata=res://*/Entities.csdl|res://*/Entities.ssdl|res://*/Entities.msl;provider=System.Data.SqlClient;provider connection string="Data Source=xxxxxxxxxx;Initial Catalog=MyDB;Persist Security Info=True;User ID=xxxx;Password=xxxxxxx;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient"/> 

我想我没有在连接字符串中正确引用O、C或CS空格。。。然而,如果我在代码中调用上下文并使用它,它就可以正常工作。那么我做错了什么


谢谢

您需要在web应用程序中添加对包含实体的程序集的引用。

实际上,我找到了一个可行的解决方案。它源于这篇文章:

因为我只使用动态数据站点进行快速和肮脏的管理,而不是作为面向客户的生产站点,所以我不关心场景中引入的性能问题。因此,我添加了一个只有DynamicData才会使用的构造函数:

public Entities(bool dynamicData)
    : base(ConfigurationManager.ConnectionStrings["Entities"].ConnectionString, ContainerName)
{
    Initialize();
    var tracestring = this.CreateQuery<Address>("Entities.Addresses").ToTraceString(); 
}
按指示工作。有点恼人,。但是每个平台都必须有mod,它们不能很好地协同工作,对吗


HTH.

如果您知道包含POCO类且具有ObjectContext的程序集,则可以使用以下方法将信息加载到元数据中以避免错误:

objectContext.MetadataWorkspace.LoadFromAssembly(assemblyWithPocos);

你说你有,但你的堆栈说你没有。可能是其他程序集之一?您的bin文件夹中可以有所有正确的项目引用和DLL,但是ObjectContext在运行时仍然无法找到该类型,除非它已加载到其元数据中。我尝试了此操作,但在RegisterContext方法上出现“不明确匹配”异常。。。