Сохранение дочерней сущности через WCF с использованием EntityFramework 4.1 - PullRequest
0 голосов
/ 07 августа 2011

Скажем, у меня есть объект Person и Address, где у Person есть список объектов Address. Информация предоставляется через службы WCF, и я пытаюсь использовать EntityFramework 4.1.

Если я хочу обновить объект Address на Person, я хочу иметь метод WCF с именем UpdateAddress (Address addr).

DBContext, похоже, имеет только список Person, для которого в объекте Person есть список Address. Это единственный способ обновить адрес, так как кажется, что для загрузки адреса необходимо загрузить весь персонал, чтобы найти его для обновления, чтобы сделать его неэффективным.

Есть ли способ просто обновить без загрузки родительской сущности?

1 Ответ

1 голос
/ 07 августа 2011

Если 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 является модельной сущностью - а 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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...