2010-11-18 13 views
2

Ich habe ein großes Problem. Wenn ich ASP-SOMETIMES ausführe, stapelt die Anwendung mit der folgenden Fehlermeldung:ASP + EF laden Montage Problem

Das angegebene Schema ist nicht gültig. Fehler: Die Typen in der Assembly 'Data.EF, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' kann nicht geladen werden, da die Anordnung der enthält EdmSchemaAttribute, und die Schließung von Typen geladen wird namentlich. Laden mit Namen und Attribut ist nicht zulässig.

Stack Trace:

[MetadataException: Schema angegeben nicht gültig ist. Fehler: Die Typen in der Versammlung 'Data.EF, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' nicht geladen werden, da die Montage der EdmSchemaAttribute, und die Schließung von Typen enthält wird geladen namentlich. Laden sowohl von Namen und Attribut nicht erlaubt.]
System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache (ObjectItemCollection objectItemCollection, Assembly Montage, Boolean loadReferencedAssemblies, EdmItemCollection edmItemCollection, Aktion logLoadMessage) +53
System.Data.Metadata.Edm.MetadataWorkspace.ExplicitLoadFromAssembly (Assembly Montage, ObjectItemCollection Sammlung, Aktion 1 logLoadMessage) +93 System.Data.Metadata.Edm.MetadataWorkspace.LoadFromAssembly(Assembly assembly, Action 1 logLoadMessage) +130 System.Web.UI.WebControls.EntityDataSource View.ConstructContext() 585 System.Web.UI.WebControls.EntityDataSourceView.ExecuteSelect (Datasourceselectarguments Argumente) +76
System.Web.UI.DataSourceView.Select (Datasourceselectarguments Argumente, Datasourceview Rückruf) +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.U I.WebControls.CompositeDataBoundControl.CreateChildControls() +75 System.Web.UI.Control.EnsureChildControls() +102 Telerik.Web.UI.GridBaseDataList.get_Controls() +33 Telerik.Web.UI.RadAjaxControl.PopulatePlainPanels ( Steuer Elternteil, List`1 Liste Steuer root) +119 Telerik.Web.UI.RadAjaxControl.OnPagePreRender (Object sender, EventArgse) 1802
System.EventHandler.Invoke (Object sender, EventArgse) + 0
System.Web.UI.Control.OnPreRender (EventArgs e) 8.864.486
System.Web.UI.Control.PreRenderRecursiveInternal() +103 System.Web.UI.P Alter.ProcessRequestMain (Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2496

Ich habe auch LoadFromAssembly vor jedem Kontext Aufruf und noch das gleiche Problem.

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

Enviroment: VS 2010, .NET 4.0, C#, EF

Könnte jemand mir bitte helfen, dieses Problem zu beheben?

Vielen Dank im Voraus,

Mit freundlichen Grüßen.

+0

könnte bitte jemand helfen ??? – ledcomp

+0

Haben Sie eine Lösung für dieses Problem gefunden? – Naor

+0

Wir haben eine similar topic auf MSDN Foren gefunden, hoffe es hilft. – Devart

Antwort

3

Ich erhielt den gleichen Fehler auf Seiten, wo es eine Mischung von EntityDataSource-Objekten und anderen Datenzugriff wie ObjectDataSource und/oder Imperativ-Code gab.

Ich nahm den Rat des MSDN-Artikels in der anderen Antwort auf Ihre Frage verwiesen. I.e. context.MetadataWorkspace.LoadFromAssembly (...) zu verwenden. Ich wusste wirklich nicht, wie einen Verweis auf die Context-Instanz von EntityDataSource verwendet bekommen, und ich dachte, ich sollte es trotzdem vertrocknen, so habe ich eine partielle Klasse zB:

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

    } 

Es ist immer noch nicht funktioniert , aber ich habe ziemlich schnell bemerkt, dass beim Aufrufen von DataBind() auf einem Steuerelement, das an eine EntityDataSource gebunden ist, meine OnContextCreated() - Implementierung nicht ausgelöst wurde!

Das war ein anderes Problem, zu dem ich eine Lösung fand ... Ersetzen Sie die ConnectionString und DefaultContainerName Attribute in der EntityDataSource-Deklaration mit ContextTypeName. Zum Beispiel:

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

Das ist meine OnContextCreated Umsetzung sorgte dafür, würde Feuer und puh, das „Laden sowohl von Namen und Attribute ist nicht erlaubt“ Problem ging weg!

+0

Ich weiß, das ist eine alte Post. Können Sie bitte klären, wo Sie diese Teilklasse hinzugefügt haben? – bobetko

0

Es ist ein alter Post, aber ich habe dieses Problem zweimal diese Woche durchlaufen und es scheint, zumindest in meinem Fall, über die Tatsache zu sein, dass ich ein VPN öffnete (für eine komplette andere Aufgabe ohne Verbindung zu diesem Entity-Projekt) und dann ist dieser Fehler passiert.

Ich habe versucht, mein VPN zu schließen ... dann schließe mein Projekt und öffne es wieder, schließe meinen VS ohne Erfolg. Aber, meinen Computer neu startend, mach es zurück.

Hoffe, dass dies hilft, wenn jemand das in den gleichen circonscents erhält.

0

Ich sah dieselbe Fehlermeldung mit EF 5.0 und WCF Data Services 5.2.0. Dies war ein Datendienst, der eine von DbContext abgeleitete Klasse verwendete.

Der Fix für mich war Code-zuerst EF-Code von Modell-zuerst EF-Code zu trennen. Durch Verschieben des Code-First-Codes in eine separate Assembly ging die Fehlermeldung verloren und die Dinge funktionieren. Der einzige Weg, wie ich es herausfinden konnte, ist, dass das [EdmSchema] Attribut auf dem Code existiert, der von unserem EDMX generiert wurde; aber es existiert nicht auf unserem Modell (Code-zuerst) Code.

Hoffnung, dass jemand hilft ...

0

Ich war tagelang den gleichen Fehler.Ich benutze war eine Mischung aus EntityDataSource-Objekten und anderen Datenzugriff wie ObjectDataSource auf der gleichen Seite. Die EntityDataSource-Objekte wurden durch ObjectDataSource ersetzt. Problem ging weg!