2010-12-10 13 views
0

Ich habe ein neues Projekt gestartet. Eine Klassenbibliothek erstellt, der ein EF-Element unter einem DB-Namespace hinzugefügt wurde, und anschließend für jede Entität, die ich in WS verfügbar machen kann, eine Klasse erstellen (abgestreift). Ich ref die CL in einer Windows-Test-App, um zu sehen, ob alles funktioniert und es war.So ich erstellt eine WS-Add-Referenz hinzugefügt die Verbindungszeichenfolge für EF und dann erstellt eine Webmethode, die das Objekt, das ich für jede Entität erstellt.EF und Webservice Fehler "System.InvalidOperationException"

so sieht mein namspaces wie diese

[Projektname] .CL.Item - erstellte Objekt [Projektname] .CL.DB.Item - Ef Artikel [Projektname] .WS - Webservice-Namespace

Also lief ich die WS und testete es. und ich bekomme diese schöne kleine Ausnahme.

System.InvalidOperationException: Unable to generate a temporary class (result=1). 
error CS0012: The type 'System.Data.Objects.DataClasses.EntityObject' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. 

    at System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence) 
    at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Assembly assembly, Hashtable assemblies) 
    at System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence) 
    at System.Xml.Serialization.XmlSerializer.FromMappings(XmlMapping[] mappings, Evidence evidence) 
    at System.Web.Services.Protocols.XmlReturn.GetInitializers(LogicalMethodInfo[] methodInfos) 
    at System.Web.Services.Protocols.XmlReturnWriter.GetInitializers(LogicalMethodInfo[] methodInfos) 
    at System.Web.Services.Protocols.MimeFormatter.GetInitializers(Type type, LogicalMethodInfo[] methodInfos) 
    at System.Web.Services.Protocols.HttpServerType..ctor(Type type) 
    at System.Web.Services.Protocols.HttpServerProtocol.Initialize() 
    at System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response) 
    at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProc 

Jetzt sagt das mir es Bezug auf data.entity müssen so habe ich noch dachte mir das ist seltsam noch nie, dies zu tun, und ich bin nicht zurückkehren Objekt Entität i die erstellten onces kehre zurück, aber ich tat es . immer noch der gleiche Fehler

dann sah ich, dass egal, welche Webmethode ich wählen, tut dies ich das webmethod kommentiert und eine helloworld gemacht und es hat funktioniert. ich habe und immer noch denselben Fehler

ich auf Google sah einige Leute suggestthat Sie

<add assembly="System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> 

zum webconfig hinzuzufügen. Ich bin verblüfft ich mache so etwas wie täglich und ich habe nie einen Fehler so. Und die EF-Struktur ist nichts besonderes 5 Tabellen mit Fremdschlüsseln.

Ich habe sogar das WS/CL-Projekt gelöscht und neu erstellt.

pls help

Antwort

2

das Problem gefunden ...

ich in jedem POCO-Klasse haben diese

namespace CL 
    { 
     public class Item 
     { 
      public static implicit operator Item(DB.Item db) 
      { 
       return new Item 
       { 
        Created = db.Created, 
        Id = db.ItemId 
       }; 
      } 
     } 
    } 

, die die DB Element in ein POCO Artikel grundsätzlich umwandelt.

Also, wenn ich das tun, statt

namespace CL.DB 
{ 
    public partial class Item 
     { 
      public static implicit operator CL.Item(Item db) 
      { 

       return new CL.Item 
       { 
        Created = db.Created, 
        Id = db.ItemId 
       }; 
      } 
     } 
} 

es funktioniert gut. WTF

+0

Danke :) Ich hatte eine ähnliche Situation, wo ich den Namespace des Elements hatte, um vorqualifiziert mit globalen :: und dann den vollständigen Namespace, der den gleichen Fehler ausgelöst hat, zu konvertieren. Das Verschieben der Typen war keine Option, also habe ich es einfach in eine Methode umgewandelt, und jetzt funktioniert alles gut. – NKCSS

Verwandte Themen