使用EntityFramework 4.1通过WCF保存子实体
本文关键字:保存 实体 WCF 1通过 EntityFramework 使用 | 更新日期: 2023-09-27 18:04:57
假设我有一个Person和一个Address对象,其中Person有一个Address对象列表。信息是通过WCF服务暴露的,我正在尝试使用EntityFramework 4.1。
如果我想更新Person上的Address对象,我想要有一个名为UpdateAddress(Address addr)的WCF方法。
DBContext似乎只有一个Person列表,其中Person对象中有一个Address列表。这是更新Address的唯一方法吗?这似乎意味着它需要加载所有Person才能在保存之前找到要更新的Address,从而使其效率低下。
是否有一种方法,只是更新而不加载父实体?
如果Person
是模型的一部分,Person
有Address
的集合,那么Address
(作为相关实体)也是模型的一部分(除非您明确地从模型中排除了Address集合)。这意味着您可以简单地将地址集作为helper属性添加到DbContext中:
public class MyContext : DbContext
{
public DbSet<Person> People { get; set; }
public DbSet<Address> Addresses { get; set; }
}
对于UpdateAdress
,您可以使用:
public void UpdateAddress(Address addr)
{
using (var context = new MyContext())
{
var addressInDb = context.Addresses.Find(addr.Id);
context.Entry(addressInDb).CurrentValues.SetValues(addr);
context.SaveChanges();
}
}
即使你不想或不能添加一个Addresses
DbSet到上下文,你可以使用上下文的Set<T>()
方法(只要T是一个模型实体- Address
应该是一个):
public void UpdateAddress(Address addr)
{
using (var context = new MyContext())
{
var addressInDb = context.Set<Address>().Find(addr.Id);
context.Entry(addressInDb).CurrentValues.SetValues(addr);
context.SaveChanges();
}
}