实体框架对象不通过WCF返回

时间:2014-01-23 15:54:59

标签: c# wcf web-services entity-framework repository

我首先使用Entity Framework代码创建链接对象的对象图并在Web服务中对其进行操作,这一切都很好。我遇到的问题是当我尝试在WCF中返回父对象时。它是一个具有许多子相关实体的User对象。

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

返回对象的代码是

 var user = _userRepository.GetUser(userId);
 return user;

IUserDataRepository是通过Unity DI工厂通过引导配置创建的,该配置附加到服务启动中的工厂。 Context也作为构造函数依赖注入到存储库中,包含在我创建的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钩子。

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

有什么想法吗?

0 个答案:

没有答案