Entity Framework Code First 读写桥梁table
Entity Framework Code First Read and write bridge table
我只是有一个关于 bridge(link) table 的简单问题。我有两个 table 具有 many-to-many
关系,并且 Visual Studio 自动生成桥 table 和来自这两个 table 的 primary key
。我对如何从 table 读取数据和向 table 写入数据有点困惑。
当我读取数据时,我是仅从具有 many-to-many
关系的两个 table 中的一个还是两者查询和获取数据?但是我该如何处理桥table?
当我写入数据时,这里也是一样,我是将数据保存到具有 many-to-many
关系的两个 table 之一还是两者?我怎么知道什么时候应该保存到桥 table?
非常混乱,我找不到任何好的教程和我可以学习的代码示例。由于我创建了 Controllers
和读写 Views
,我认为这个问题在自动生成的代码中得到了处理,但是由于桥 table 是空的,尽管我已经添加了数据其他 tables,我需要问这个问题来弄清楚这个问题!如果有任何人可以告诉我它是如何用简单的例子或 link 工作的,请提出建议。谢谢!
编辑:Table 一些 table 的实体。我正在用 ASP.NET MVC 做这个项目。
public class Order
{
public int ID { get; set; }
public string Name { get; set; }
public int? ManufacturerID { get; set; }
public virtual Manufacturer Manufacturer { get; set; }
public virtual ICollection<Employee> Employees { get; set; }
}
public class Employee
{
public int ID { get; set; }
public string Name { get; set; }
public int EmployeeNumber { get; set; }
public virtual ICollection<Timeunit> Timeunits { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}
以上关系将创建一个桥梁table,例如:
public class OrderEmployeeEnrollments{
public int OrderId {get;set;}
public int EmployeeId {get;set;}
}
从 Order
table 读取员工的数据:
using (var context = new YourContext())
{
var order= context.Orders.Where(o => o.OrderEmployeeEnrollments.
Any(e => e.Employee.EmployeeId == employeeId );
}
插入 Order
table:
using (var context = new YourContext())
{
var order= new Order{
Name="",
ManufacturerID= 2 ,
Manufacturer = new Manufacturer { // create Manufacturer },
Employees = new List<Employee> { // create list}
}
context.Orders.Add(order);
context.SaveChanges();
}
要插入 'Order' table 现有员工:
using (var context = new YourContext())
{
var order= new Order{
Name="",
ManufacturerID= 2 ,
Employees = context.Employees.Where(e=> e.Name=="Name")
}
context.Orders.Add(order);
context.SaveChanges();
}
希望这会有所帮助:)
Entity Framework 的工作方式使您不必担心桥 table。只要您定义了实体之间的关系,它就会为您处理。
在这种情况下:
public class Order
{
...
public virtual ICollection<Employee> Employees { get; set; }
}
public class Employee
{
...
public virtual ICollection<Order> Orders { get; set; }
}
这是一个例子..
写:
Order order = new Order();
order.Name = "foo";
order.Employees = _ctx.Employees.Where(e => id > 0 && id <= 5);
_ctx.Orders.Add(order);
_ctx.SaveChanges();
阅读:
List<Employee> employees = _ctx.Employees.Where(e => id > 0 && id <= 5);
foreach(Employee emp in employees)
{
Order theOrder = emp.Orders.FirstOrDefault(o => o.ID == order.ID);
if(theOrder != null)
{
Console.WriteLine("Employee {0} has served order {1}", emp.ID, theOrder.ID);
}
}
我只是有一个关于 bridge(link) table 的简单问题。我有两个 table 具有 many-to-many
关系,并且 Visual Studio 自动生成桥 table 和来自这两个 table 的 primary key
。我对如何从 table 读取数据和向 table 写入数据有点困惑。
当我读取数据时,我是仅从具有 many-to-many
关系的两个 table 中的一个还是两者查询和获取数据?但是我该如何处理桥table?
当我写入数据时,这里也是一样,我是将数据保存到具有 many-to-many
关系的两个 table 之一还是两者?我怎么知道什么时候应该保存到桥 table?
非常混乱,我找不到任何好的教程和我可以学习的代码示例。由于我创建了 Controllers
和读写 Views
,我认为这个问题在自动生成的代码中得到了处理,但是由于桥 table 是空的,尽管我已经添加了数据其他 tables,我需要问这个问题来弄清楚这个问题!如果有任何人可以告诉我它是如何用简单的例子或 link 工作的,请提出建议。谢谢!
编辑:Table 一些 table 的实体。我正在用 ASP.NET MVC 做这个项目。
public class Order
{
public int ID { get; set; }
public string Name { get; set; }
public int? ManufacturerID { get; set; }
public virtual Manufacturer Manufacturer { get; set; }
public virtual ICollection<Employee> Employees { get; set; }
}
public class Employee
{
public int ID { get; set; }
public string Name { get; set; }
public int EmployeeNumber { get; set; }
public virtual ICollection<Timeunit> Timeunits { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}
以上关系将创建一个桥梁table,例如:
public class OrderEmployeeEnrollments{
public int OrderId {get;set;}
public int EmployeeId {get;set;}
}
从 Order
table 读取员工的数据:
using (var context = new YourContext())
{
var order= context.Orders.Where(o => o.OrderEmployeeEnrollments.
Any(e => e.Employee.EmployeeId == employeeId );
}
插入 Order
table:
using (var context = new YourContext())
{
var order= new Order{
Name="",
ManufacturerID= 2 ,
Manufacturer = new Manufacturer { // create Manufacturer },
Employees = new List<Employee> { // create list}
}
context.Orders.Add(order);
context.SaveChanges();
}
要插入 'Order' table 现有员工:
using (var context = new YourContext())
{
var order= new Order{
Name="",
ManufacturerID= 2 ,
Employees = context.Employees.Where(e=> e.Name=="Name")
}
context.Orders.Add(order);
context.SaveChanges();
}
希望这会有所帮助:)
Entity Framework 的工作方式使您不必担心桥 table。只要您定义了实体之间的关系,它就会为您处理。
在这种情况下:
public class Order
{
...
public virtual ICollection<Employee> Employees { get; set; }
}
public class Employee
{
...
public virtual ICollection<Order> Orders { get; set; }
}
这是一个例子..
写:
Order order = new Order();
order.Name = "foo";
order.Employees = _ctx.Employees.Where(e => id > 0 && id <= 5);
_ctx.Orders.Add(order);
_ctx.SaveChanges();
阅读:
List<Employee> employees = _ctx.Employees.Where(e => id > 0 && id <= 5);
foreach(Employee emp in employees)
{
Order theOrder = emp.Orders.FirstOrDefault(o => o.ID == order.ID);
if(theOrder != null)
{
Console.WriteLine("Employee {0} has served order {1}", emp.ID, theOrder.ID);
}
}