使用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,从而使其效率低下。

是否有一种方法,只是更新而不加载父实体?

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

如果Person是模型的一部分,PersonAddress的集合,那么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();
    }
}