【发布时间】:2015-04-09 14:28:08
【问题描述】:
有人能指出我查询多对多关系的正确方向吗?我正在尝试获取所有活跃机器操作员的列表,但我这辈子似乎无法做到这一点。
如果它有任何用处,这就是我一直在尝试的方法
public HttpResponseMessage Get()
{
using (DAL.Repositories.Repository<Machine> machineRepo = new DAL.Repositories.Repository<Machine>())
using (DAL.Repositories.Repository<Operator> operatorRepo = new DAL.Repositories.Repository<Operator>())
{
List<int> OperatorIDs = new List<int>();
List<Machine> Machine = new List<Machine>();
OperatorIDs = operatorRepo.FindAll(x => x.Active).Select(y => y.ID).ToList();
var machineOperators = machineRepo.FindAll(x => x.Active).Select(x => x.Operators.All(o => OperatorIDs.Contains(o.ID)));
return Request.CreateResponse(HttpStatusCode.OK, machineOperators);
}
}
我的代码如下
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; }
}
在我的 efContext 中
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"));
}
【问题讨论】:
-
您要返回什么?所有操作员都处于活动状态的所有活动机器?
-
活动机器列表及其对应的活动操作员
标签: c# entity-framework asp.net-web-api many-to-many