2010-12-10 5 views
0

J'ai démarré un nouveau projet. Créer une bibliothèque de classes a ajouté l'élément EF sous un espace de noms DB, puis créer une classe (Stripped down) pour chaque entité que je peux exposer dans WS. Je ref le CL dans une application de test de Windows pour voir si tout fonctionnait et il l'était. Alors j'ai créé une référence d'ajout de WS ajouté le connectionstring pour EF et ai alors créé un webmethod qui retruns l'objet que j'ai créé pour chaque entité.Erreur EF et service Web "System.InvalidOperationException"

donc mes namspaces ressemble à ceci

[projectName] .CL.Item - objet créé [projectName] .CL.DB.Item - Ef article [projectName] WAS - espace de noms Webservice

J'ai donc couru le ws et l'ai testé. et je reçois cette belle petite exception.

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 

Maintenant, cela me dit qu'il a besoin de référence data.entity donc j'ai ajouté en pensant encore moi-même est étrange jamais eu à faire et je ne suis pas de retour objet entité je retourne les créés mais je onces l'a fait . toujours la même erreur

puis j'ai vu que peu importe quelle webmethod je sélectionne cela, j'ai commenté la webmethod et fait un helloworld et cela a fonctionné.

J'ai regardé sur google certaines personnes suggestthat vous ajoutez

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

au webconfig je l'ai fait et toujours la même erreur. Je suis abasourdi je fais ce genre de chose comme tous les jours et je n'ai jamais eu une erreur comme celle-ci. Et la structure EF n'a rien de spécial 5 tables avec des étrangers. J'ai même supprimé le projet WS/CL et l'ai recréé.

pls aider

Répondre

2

trouvé le problème ...

J'ai dans chaque classe POCO ce

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

qui convertit essentiellement l'élément DB dans un élément POCO.

Donc, si je le fais à la place

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 
       }; 
      } 
     } 
} 

il fonctionne très bien. WTF

+0

Merci :) J'ai eu une situation similaire où j'avais l'espace de nom de l'élément à convertir pré-qualifié avec global :: puis l'espace de noms complet, qui a déclenché la même erreur. Déplacer les types n'était pas une option, donc je l'ai juste converti en une méthode, et maintenant tout fonctionne bien. – NKCSS

Questions connexes