ASP + EF проблема загрузки сборки - PullRequest
2 голосов
/ 18 ноября 2010

У меня большая проблема. Когда я запускаю 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 сборка, логическое значение loadReferencedAssemblies, EdmItemCollection edmItemCollection, Действие 1 logLoadMessage) +480<br> System.Data.Metadata.Edm.ObjectItemCollection.ExplicitLoadFromAssembly(Assembly assembly, EdmItemCollection edmItemCollection, Action 1 logLoadMessage) + 53
System.Data.Metadata.Edm.MetadataWorkspace.ExplicitLoadFromAssembly (Собрание сборка, 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 callback) +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 (Управление родитель, список List1, управляющий корень) +119 Telerik.Web.UI.RadAjaxControl.OnPagePreRender (Объект отправитель, EventArgs e) + 1802
System.EventHandler.Invoke (Объект отправитель, EventArgs e) + 0
System.Web.UI.Control.OnPreRender (EventArgs е) + 8864486
System.Web.UI.Control.PreRenderRecursiveInternal () +103 System.Web.UI.Page.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) + 2496

Я также добавил LoadFromAssembly перед каждым вызовом контекста, и все та же проблема.

context.MetadataWorkspace.LoadFromAssembly(context.GetType().Assembly);

Окружающая среда: VS 2010, .NET 4.0, C #, EF

Может кто-нибудь помочь мне решить эту проблему?

Заранее спасибо,

С наилучшими пожеланиями.

Ответы [ 4 ]

3 голосов
/ 25 июля 2011

Я получал ту же ошибку на страницах, где было сочетание объектов EntityDataSource и другого доступа к данным, такого как ObjectDataSource и / или императивный код.

Я воспользовался советом из статьи MSDN, упомянутой в другойответь на твой вопрос.Т.е. использовать context.MetadataWorkspace.LoadFromAssembly (...).Я на самом деле не знал, как получить ссылку на экземпляр контекста, используемый EntityDataSource, и я решил, что в любом случае мне следует его СУШИТЬ, поэтому я создал частичный класс, например:

    public partial class YourTypeNameEntities
{
    partial void OnContextCreated()
    {
        this.MetadataWorkspace.LoadFromAssembly(typeof(Full.Namespace.Of.YourTypeNameEntities).Assembly);

    }

Это все еще не былоЭто не сработало, но я довольно быстро заметил, что при вызове DataBind () для элемента управления, связанного с EntityDataSource, моя реализация OnContextCreated () не запускалась!

Это была другая проблема, решение которой я нашел ...Замените атрибуты ConnectionString и DefaultContainerName в объявлении EntityDataSource на ContextTypeName.Например:

    <asp:EntityDataSource ID="CountrySource" runat="server" 
ContextTypeName="Full.Namespace.Of.YourTypeNameEntities" EntitySetName="Country" 
OrderBy="it.Name" Where="it.Active==true">

Это обеспечило запуск моей реализации OnContextCreated и POOF, проблема «Загрузка по имени и атрибуту не разрешена» исчезла!

0 голосов
/ 04 декабря 2014

Я получал ту же ошибку в течение нескольких дней.Я использовал смесь объектов EntityDataSource и других данных, таких как ObjectDataSource на той же страницеЗаменены объекты EntityDataSource на ObjectDataSource.Проблема ушла!

0 голосов
/ 17 февраля 2013

Я видел то же сообщение об ошибке при использовании EF 5.0 и WCF Data Services 5.2.0. Это была служба данных, использующая класс DbContext.

Исправление для меня состояло в том, чтобы отделить код EF с первым кодом от кода EF с первым кодом. Перемещая код с первым кодом в отдельную сборку, сообщение об ошибке исчезло, и все работает. Единственный способ, которым я смог выяснить это, заключается в том, что атрибут [EdmSchema] существует в коде, сгенерированном из нашего EDMX; но он не существует в коде нашей модели (сначала кода).

Надеюсь, это кому-нибудь поможет ...

0 голосов
/ 04 января 2013

Это старый пост, но я дважды рассматривал эту проблему на этой неделе, и, по крайней мере, в моем случае это связано с тем, что я открыл VPN (для выполнения другой задачи без ссылки на этот объект projet), а затем, эта ошибка произошла.

Я пытался закрыть свой VPN ... затем закрыть мой проект и открыть заново, полностью закрыть мой VS без какого-либо успеха. Но, перезагружая мой компьютер, он снова работает.

Надеюсь, это поможет, если кто-то получит это в тех же обстоятельствах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...