C# 实体框架对象未通过WCF返回

C# 实体框架对象未通过WCF返回,c#,wcf,web-services,entity-framework,repository,C#,Wcf,Web Services,Entity Framework,Repository,我首先使用实体框架代码来创建链接对象的对象图,并在web服务中对它们进行操作,这一切都连接得很好。我遇到的问题是,当我尝试通过WCF返回父对象时。它是一个具有多个子相关实体的用户对象 奇怪的是,如果我深度克隆用户对象(我自己的实现,它在所有级别创建了一个具有相同属性的新用户对象)并返回克隆的对象,它就可以正常工作。只有当我试图返回EF返回的对象实体时,它才起作用 返回对象的代码是 var user = _userRepository.GetUser(userId); return user;

我首先使用实体框架代码来创建链接对象的对象图,并在web服务中对它们进行操作,这一切都连接得很好。我遇到的问题是,当我尝试通过WCF返回父对象时。它是一个具有多个子相关实体的用户对象

奇怪的是,如果我深度克隆用户对象(我自己的实现,它在所有级别创建了一个具有相同属性的新用户对象)并返回克隆的对象,它就可以正常工作。只有当我试图返回EF返回的对象实体时,它才起作用

返回对象的代码是

 var user = _userRepository.GetUser(userId);
 return user;
IUserDataRepository通过Unity DI工厂创建,由服务启动时附加到工厂的引导配置创建。该上下文还作为构造函数依赖项注入到存储库中,并封装在我创建的IUnitOfWork对象中。在您拥有的存储库中

public class UserDataRepository : IUserDataRepository
{
     public UserDataRepository(IUnitOfWork work)
        {
            this.Work = work;
        }

     private IUnitOfWork Work { get; set; }

     public DbUser GetUser(int id)
     {
        return UnitOfWork.Context.Users.FirstOrDefault(u => u.UserId == id);
     }
}
当我尝试返回加载的DbUser对象时,得到一个400错误System.ServiceModel.ProtocolException(错误请求)

但是,如果我将对象克隆到我自己创建的新DbUser对象,则返回的结果很好

我能想到的唯一一件事是EF仍然在DbUser对象中有一些钩子,并且不会让您将该对象传递回去,而手动创建的相同对象是可以的,因为它没有EF钩子

我尝试过在上下文级别关闭所有实体的延迟加载,但仍然没有乐趣


有什么想法吗?

工作的克隆代码是什么样子的?它是一个非常原始的静态类方法。它只是手动创建一个新的DbUser对象,从原始对象一个接一个地填充每个属性,那么您的用户类是什么样子的呢?是否有任何属性引用类型的值作为实体存储在其他表中?是的,有许多基本属性,但也有许多其他链接实体,每个实体都存储在其他表中。即一个用户对象包含一个密码对象、一个配置文件对象、一组照片对象等,这些其他对象中的每一个都在另一个表中