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

发布于 2024-11-28 17:20:50 字数 326 浏览 1 评论 0原文

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

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

DBContext似乎只有一个Person列表,其中Person对象中有一个Address列表。这是更新地址的唯一方法吗,因为它似乎意味着它需要加载所有人员才能在保存之前找到要更新的地址,从而使其效率低下。

有没有办法只更新而不加载父实体?

Say I have a Person and an Address object where a Person has a list of Address objects. The info is exposed via WCF services, and I'm trying to use EntityFramework 4.1.

If I want to update an Address object on a Person, I want to have a WCF method called UpdateAddress(Address addr).

The DBContext only seems to have a list of Person of which there is a list of Address in the Person object. Is that the only way to update an Address as it seems that implies it needs to load all of the Person to find an Address to update before saving making it inefficient.

Is there a way to just update without loading the parent entity?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心在旅行 2024-12-05 17:20:50

如果 Person 是模型的一部分,并且 Person 有一个 Address 集合,那么还有 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 code> DbSet 到上下文,您可以使用上下文的 Set() 方法(只要 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();
    }
}

If Person is part of the model and Person has a collection of Address then also Address (as a related entity) is part of the model (unless you excluded the Address collection explicitely from the model). That means you can simply add the Address set to the DbContext as a helper property:

public class MyContext : DbContext
{
    public DbSet<Person> People { get; set; }
    public DbSet<Address> Addresses { get; set; }
}

For UpdateAdress you can then use:

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();
    }
}

Even if you don't want or can't add an Addresses DbSet to the context you can use the Set<T>() method of the context (as long as T is a model entity - and Address should be one):

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();
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文