使用EntityFramework 4.1通过WCF保存子实体

时间:2011-08-07 14:04:26

标签: c# entity-framework-4 parent-child

假设我有一个Person和一个Address对象,其中Person有一个Address对象列表。信息通过WCF服务公开,我正在尝试使用EntityFramework 4.1。

如果我想更新Person上的Address对象,我想要一个名为UpdateAddress(Address addr)的WCF方法。

DBContext似乎只有一个Person列表,其中Person对象中有一个Address列表。这是更新地址的唯一方法,因为它似乎意味着它需要加载所有Person以找到要更新的地址,然后再保存,使其效率低下。

有没有办法在不加载父实体的情况下进行更新?

1 个答案:

答案 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