我首先使用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钩子。
我尝试在所有实体的上下文级别关闭延迟加载,但仍然没有快乐。
有什么想法吗?