假设我有一个Person和一个Address对象,其中Person有一个Address对象列表。信息通过WCF服务公开,我正在尝试使用EntityFramework 4.1。
如果我想更新Person上的Address对象,我想要一个名为UpdateAddress(Address addr)的WCF方法。
DBContext似乎只有一个Person列表,其中Person对象中有一个Address列表。这是更新地址的唯一方法,因为它似乎意味着它需要加载所有Person以找到要更新的地址,然后再保存,使其效率低下。
有没有办法在不加载父实体的情况下进行更新?
答案 0 :(得分:1)
如果Person
是模型的一部分且Person
的集合为Address
,那么Address
(作为相关实体)也是模型的一部分(除非您从模型中明确地排除了地址集合。这意味着您只需将地址集添加到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是模型实体 - 并且{ {1}}应该是一个):
Address