我有一个大问题。当我运行asp SOMETIMES时,应用程序正在运行时出现以下错误消息:
指定的架构无效。错误: 程序集'Data.EF中的类型, 版本= 1.0.0.0,文化=中立, 无法加载PublicKeyToken = null' 因为程序集包含 EdmSchemaAttribute,以及关闭 类型正在按名称加载。 按名称和属性加载是 不允许。
堆栈追踪:
[MetadataException:指定了架构 无效。错误:中的类型 程序集'Data.EF, 版本= 1.0.0.0,文化=中立, 无法加载PublicKeyToken = null' 因为程序集包含 EdmSchemaAttribute,以及关闭 类型正在按名称加载。 按名称和属性加载是 不允许。]
System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache(ObjectItemCollection objectItemCollection,Assembly assembly,布尔值 loadReferencedAssemblies, EdmItemCollection edmItemCollection, 行动1 logLoadMessage) +480
1 logLoadMessage)+53
System.Data.Metadata.Edm.ObjectItemCollection.ExplicitLoadFromAssembly(Assembly assembly, EdmItemCollection edmItemCollection, Action
System.Data.Metadata.Edm.MetadataWorkspace.ExplicitLoadFromAssembly(大会 assembly,ObjectItemCollection 集合,动作1 logLoadMessage) +93 System.Data.Metadata.Edm.MetadataWorkspace.LoadFromAssembly(Assembly assembly, Action
1 logLoadMessage) +130 System.Web.UI.WebControls.EntityDataSourceView.ConstructContext() +585 System.Web.UI.WebControls.EntityDataSourceView.ExecuteSelect(DataSourceSelectArguments 论点)+76
System.Web.UI.DataSourceView.Select(DataSourceSelectArguments 参数, DataSourceViewSelectCallback回调) +21 System.Web.UI.WebControls.DataBoundControl.PerformSelect() +143 Telerik.Web.UI.GridTableView.PerformSelect() +38 System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +74 Telerik.Web.UI.GridTableView.DataBind() +363 Telerik.Web.UI.RadGrid.DataBind()+ 173 System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +66 System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +75 System.Web.UI.Control.EnsureChildControls() +102 Telerik.Web.UI.GridBaseDataList.get_Controls() +33 Telerik.Web.UI.RadAjaxControl.PopulatePlainPanels(Control parent,List`1 list,Control root) +119 Telerik.Web.UI.RadAjaxControl.OnPagePreRender(Object 发件人,EventArgs e)+1802
System.EventHandler.Invoke(对象 发件人,EventArgs e)+0
System.Web.UI.Control.OnPreRender(EventArgs的 e)+8864486
System.Web.UI.Control.PreRenderRecursiveInternal() +103 System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+2496
我还在每个上下文调用之前添加了LoadFromAssembly,但仍然存在同样的问题。
context.MetadataWorkspace.LoadFromAssembly(context.GetType().Assembly);
环境:VS 2010,.NET 4.0,C#,EF
可以请有人帮助我解决这个问题吗?
提前致谢,
最好的问候。
答案 0 :(得分:3)
我在EntityDataSource对象和其他数据访问(如ObjectDataSource和/或命令式代码)混合的页面上收到相同的错误。
我接受了你问题的另一个答案中引用的MSDN文章的建议。即使用context.MetadataWorkspace.LoadFromAssembly(...)。我实际上不知道如何获取EntityDataSource使用的上下文实例的引用,我想我还是应该干它,所以我创建了一个部分类,例如:
public partial class YourTypeNameEntities
{
partial void OnContextCreated()
{
this.MetadataWorkspace.LoadFromAssembly(typeof(Full.Namespace.Of.YourTypeNameEntities).Assembly);
}
它仍然无效,但我很快注意到,在绑定到EntityDataSource的控件上调用DataBind()时,我的OnContextCreated()实现没有被触发!
这是我找到解决方案的另一个问题......用ContextTypeName替换EntityDataSource声明中的ConnectionString和DefaultContainerName属性。例如:
<asp:EntityDataSource ID="CountrySource" runat="server"
ContextTypeName="Full.Namespace.Of.YourTypeNameEntities" EntitySetName="Country"
OrderBy="it.Name" Where="it.Active==true">
这确保我的OnContextCreated实现会触发和POOF,“不允许使用名称和属性加载”问题消失了!
答案 1 :(得分:0)
这是一个老帖子,但我本周两次遇到这个问题,至少在我的情况下似乎与我打开VPN的事实有关(对于完整的其他任务,没有链接到这个实体项目然后,发生了这个错误。
我试图关闭我的VPN ...然后关闭我的项目并重新打开,完全关闭我的VS而没有任何成功。但是,重新启动计算机会使其恢复正常。
希望如果有人在相同的情况下得到这个,这会有所帮助。
答案 2 :(得分:0)
我看到了使用EF 5.0和WCF Data Services 5.2.0的相同错误消息。这是一个使用DbContext
派生类的数据服务。
我的修复方法是将代码优先的EF代码与模型优先的EF代码分开。通过将代码优先代码移动到单独的程序集中,错误消息消失了,而且工作正常。我能够想到尝试这个的唯一方法是,从我们的EDMX生成的代码中存在[EdmSchema]
属性;但它并不存在于我们的模型(代码优先)代码中。
希望有人帮助......
答案 3 :(得分:0)
我几天都得到同样的错误。我使用的是EntityDataSource对象和其他数据访问的混合,例如同一页面中的ObjectDataSource。用ObjectDataSource替换了EntityDataSource对象。问题消失了!