WCF循环引用,无法用IsReference = true解决

时间:2014-01-15 01:28:45

标签: wcf entity-framework cyclic-reference

我知道这个问题已经问了一百万次。但我的情况,我很奇怪,我不明白。 我有一个循环引用,下面是我的代码/配置:

  1. 我将Entity作为所有实体的基类。

    [DataContract(IsReference = true)]
    public class Entity : IEntity
    
  2. 继承类是这样的,由Entity Framework 6

    创建
    [DataContract]
    public partial class User: Entity
    

    我有GroupUserGroupUserGroupAdministrator。我想这里的名字很清楚。 GroupGroupUserUserGroupUserGroupUserGroup & User

  3. 在DbContext中,代理创建已关闭,延迟加载已启用。

  4. 错误来自此方法,当我调用它时,我得到了 cyclic reference

    public IList<Group> GetGroups()
    {
        return _groupRepository.GetAll(true, _ => _.GroupAdministrators.Select(__=>__.User), _ => _.GroupUsers.Select(__ => __.User));
    }
    

    我调试,根本原因是:_ => _.GroupUsers.Select(__ => __.User)

    _groupRepository.GetAll()

    public IList<T> GetAll(bool? isActive = true, params Expression<Func<T, object>>[] includes)
    {
        IQueryable<T> query = BrokerageSimulatorContext.Set<T>()
            .Where(_ => (isActive.HasValue && _.IsActive == isActive) || !isActive.HasValue);
        return includes.Aggregate(query, (current, includeProperty) => current.Include(includeProperty)).ToList();
    }
    
  5. 我为什么需要? _ => _.GroupUsers.Select(__ => __.User)因为我需要在列出所有群组时包含该群组的用户。

0 个答案:

没有答案