Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF循环引用,无法使用IsReference=true进行求解_Wcf_Entity Framework_Cyclic Reference - Fatal编程技术网

WCF循环引用,无法使用IsReference=true进行求解

WCF循环引用,无法使用IsReference=true进行求解,wcf,entity-framework,cyclic-reference,Wcf,Entity Framework,Cyclic Reference,我知道这个问题已经问了一百万次了。但我的情况很奇怪,我不明白。 我得到了一个循环引用,下面是我的代码/配置: 我将实体作为所有实体的基类 [DataContract(IsReference = true)] public class Entity : IEntity 继承的类如下所示,由实体框架6创建 [DataContract] public partial class User: Entity 我有组,用户,组用户,组管理员。我想这里的名字很清楚组有组用户,用户有组用户和组用户有组和用

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

  • 我将实体作为所有实体的基类

    [DataContract(IsReference = true)]
    public class Entity : IEntity
    
  • 继承的类如下所示,由实体框架6创建

    [DataContract]
    public partial class User: Entity
    
    我有
    用户
    组用户
    组管理员
    。我想这里的名字很清楚<代码>组有
    组用户
    用户
    组用户
    组用户
    组和用户

  • 在DbContext中,代理创建处于关闭状态,延迟加载处于打开状态

  • 错误来自这个方法,当我调用它时,我得到了一个循环引用

    public IList<Group> GetGroups()
    {
        return _groupRepository.GetAll(true, _ => _.GroupAdministrators.Select(__=>__.User), _ => _.GroupUsers.Select(__ => __.User));
    }
    
  • 为什么我需要
    \u=>\ uu.GroupUsers。选择(\uu=>\ uuuu.User)
    ,因为我需要在列出所有组时包括该组的用户


  • 您是否尝试过在返回数据之前使用调试器查看数据?是否存在循环引用?是的,没有循环引用,因为代理创建是关闭=>groupUser对象没有组对象,而groupUser.User对象没有组。。。。
    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();
    }