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);
}
}