Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.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
C# 具有泛型repository的多对多查询_C#_Entity Framework_Asp.net Web Api_Many To Many - Fatal编程技术网

C# 具有泛型repository的多对多查询

C# 具有泛型repository的多对多查询,c#,entity-framework,asp.net-web-api,many-to-many,C#,Entity Framework,Asp.net Web Api,Many To Many,有人能告诉我查询多对多关系的正确方向吗。我正试图得到一份所有活跃的机器操作员的名单,但就我的一生而言,我似乎无法把它弄对 如果有用的话,这就是我到目前为止一直在尝试的 试试这个: public HttpResponseMessage Get() { using (DAL.Repositories.Repository<Machine> machineRepo = new DAL.Repositories.Repository<Machine>()) {

有人能告诉我查询多对多关系的正确方向吗。我正试图得到一份所有活跃的机器操作员的名单,但就我的一生而言,我似乎无法把它弄对

如果有用的话,这就是我到目前为止一直在尝试的

试试这个:

public HttpResponseMessage Get()
{
    using (DAL.Repositories.Repository<Machine> machineRepo = new DAL.Repositories.Repository<Machine>())
    {
        var machineOperators = machineRepo.FindAll(x => x.Active).Include(x=>x.Operators).Where(x => x.Operators.All(o =>o.Active)).ToList();

        return Request.CreateResponse(HttpStatusCode.OK, machineOperators);
    }
}
public HttpResponseMessage Get()
{
使用(DAL.Repositories.Repository machineRepo=new DAL.Repositories.Repository())
{
var machineeoperators=machineerpo.FindAll(x=>x.Active)。包括(x=>x.Operators)。其中(x=>x.Operators.All(o=>o.Active)).ToList();
返回请求.CreateResponse(HttpStatusCode.OK,machineOperators);
}
}

您想要返回什么?所有操作员处于活动状态的所有活动机器?活动机器列表及其相应的活动操作员返回活动机器,但没有操作员
{“$id”:“1”,“id”:1,“MachineName”:“Roland X1000”,“active”:true,“operators”:[],“Departments”:[]}
可能您已禁用延迟加载,请尝试使用
Include
扩展方法快速加载导航属性。现在我看到您的
操作符
导航属性不是
虚拟的
,如果您希望EF跟踪实体中的更改并延迟加载导航属性,您需要将它们声明为虚拟:
公共虚拟ICollection操作符{get;set;}
是的,这非常有效。现在,当返回结果时,我面临这个错误<代码>ObjectContent1类型未能序列化内容类型application/json的响应正文;charset=utf-8
检查以下帖子中的答案:,以及
public class Operator
{
    public Operator()
    {
        Machines = new HashSet<Machine>();
    }

    public int ID { get; set; }
    public string FirstName { get; set; }
    public string Surname { get; set; }
    public bool Active { get; set; }

    // Navigational Link
    public virtual ICollection<Machine> Machines { get; set; }
}

public class Machine
{
    public Machine()
    {
        Departments = new HashSet<Department>();
        Operators = new HashSet<Operator>();
    }

    public int ID { get; set; }
    public string MachineName { get; set; }
    public bool Active { get; set; }

    public ICollection<Operator> Operators { get; set; }
}
public MachineConfiguration()
    {
        // Key
        HasKey(x => x.ID);

        // Fields
        Property(x => x.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        Property(x => x.MachineName).IsRequired();

        // Table
        ToTable("Machine");

        // Relationships
        HasMany(e => e.Operators)
            .WithMany(e => e.Machines)
            .Map(m => m.ToTable("MachineOperators")
                .MapLeftKey("MachineID")
                .MapRightKey("OperatorID"));
    }
public HttpResponseMessage Get()
{
    using (DAL.Repositories.Repository<Machine> machineRepo = new DAL.Repositories.Repository<Machine>())
    {
        var machineOperators = machineRepo.FindAll(x => x.Active).Include(x=>x.Operators).Where(x => x.Operators.All(o =>o.Active)).ToList();

        return Request.CreateResponse(HttpStatusCode.OK, machineOperators);
    }
}