通过WCF返回实体框架对象

Mat*_*aes 3 linq wcf object

我们有关于Entity Framework对象的问题并通过WCF发送它们.我们有一个数据库,实体框架从该数据库创建了类,在这种特殊情况下是一个"钱包"类.

我们尝试使用以下代码转移电子钱包:

public Wallet getWallet()
{
    Wallet w = new Wallet();
    w.name = "myname";
    w.walletID = 123;
    return w;
}
Run Code Online (Sandbox Code Playgroud)

我们需要转移那个Wallet类,但是它不起作用,我们总是遇到同样的异常:

"收到对localhost的HTTP响应时发生错误:8860/ComplementaryCoins.svc.这可能是由于服务端点绑定不使用HTTP协议.这也可能是由于服务器中止了HTTP请求上下文(可能是由于服务关闭).有关详细信息,请参阅服务器日志."

我们在互联网上搜索,错误可能是由于需要对Entity Framework对象进行序列化.

我们完全不知道是否会出现这种情况,如果是这种情况,如何解决.我们的DataContract看起来像这样(非常简单):

[DataContract]
public partial class Wallet
{
    [DataMember]
    public int getwalletID { get { return walletID; } }
    [DataMember]
    public string getname { get { return name; } }
}
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过这个问题?

编辑:我们的实体框架创建的类看起来像这样:

namespace ComplementaryCoins
{
    using System;
    using System.Collections.Generic;

    public partial class Wallet
    {
        public Wallet()
        {
            this.Transaction = new HashSet<Transaction>();
            this.Transaction1 = new HashSet<Transaction>();
            this.User_Wallet = new HashSet<User_Wallet>();
            this.Wallet_Item = new HashSet<Wallet_Item>();
        }

        public int walletID { get; set; }
        public string name { get; set; }

        public virtual ICollection<Transaction> Transaction { get; set; }
        public virtual ICollection<Transaction> Transaction1 { get; set; }
        public virtual ICollection<User_Wallet> User_Wallet { get; set; }
        public virtual ICollection<Wallet_Item> Wallet_Item { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

谢谢你帮助我们.

Naw*_*ada 16

我前段时间遇到了同样的问题,解决方法是:

实体框架返回一个序列化类而不是普通类.例如.Wallet_asfawfklnaewfklawlfkawlfjlwfejlkef而不是钱包

要解决这个问题,您可以添加以下代码:

base.Configuration.ProxyCreationEnabled = false;
Run Code Online (Sandbox Code Playgroud)

在您的上下文文件中.由于上下文文件是自动生成的,您可以在Context.tt中添加它.在Context.tt文件中,它可以添加到第55-65行:

<#=Accessibility.ForType(container)#> partial class <#=code.Escape(container)#> : DbContext
{
public <#=code.Escape(container)#>()
    : base("name=<#=container.Name#>")
{
base.Configuration.ProxyCreationEnabled = false;
<#
if (!loader.IsLazyLoadingEnabled(container))
{
#>
    this.Configuration.LazyLoadingEnabled = false;
<#
Run Code Online (Sandbox Code Playgroud)