EF和Webservice错误“System.InvalidOperationException”

时间:2010-12-10 12:25:15

标签: c# web-services entity-framework

我开始了一个新项目。在DB命名空间下创建了一个向其添加EF项的类库,然后为我可以在WS中公开的每个实体创建一个类(Stripped down)。我在Windows测试应用程序中引用了CL以查看是否一切正常并且它是。所以我创建了一个WS添加引用添加了EF的连接字符串,然后创建了一个webmethod来重新创建我为每个实体创建的对象。

所以我的namspace看起来像这样

[projectName] .CL.Item - 创建的对象 [projectName] .CL.DB.Item - Ef Item [projectName] .WS - Webservice命名空间

所以我跑了ws并测试了它。我得到了这个可爱的小例外。

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

现在这告诉我它需要引用data.entity所以我添加仍然在想自己这是奇怪的从来没有必要这样做我不返回实体对象我返回创建的onces但我做到了。仍然是同样的错误

然后我看到,无论我选择了什么webmethod,我都会对webmethod进行评论并制作一个helloworld并且它有效。

我在谷歌看了一些人建议你添加

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

到webconfig我做了但仍然是同样的错误。我傻眼了,我做了像日常这样的事情,我从来没有像这样的错误。而EF结构并没有什么特别的5个表与外键。

我甚至删除了WS / CL项目并重新创建它。

请帮助

1 个答案:

答案 0 :(得分:2)

发现问题......

我在每个POCO课上都有这个

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

基本上将DB项目转换为POCO项目。

所以,如果我这样做

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

它工作正常。 WTF