как легко обновить сущность прямо из вызова wcf? - PullRequest
0 голосов
/ 01 июня 2011

Это то, что у меня есть в моей службе WCF

public long Generic_Save(Product p, ObjectSet os)
{
    if (p.Id == 0)
    {
        os.AddObject(p);
    }
    else
    {
        // UPDATE
        Product original = os.Single<Project>(o => o.Id == p.Id);

        original.Name = p.Name;

        original.Items = p.Items; // doesn't work !
    }

    dataEntities.SaveChanges();

    return p.Id;
}

Product p - это объект из вызова WCF с EntityKey и т. Д., Но он не привязан к текущим dataEntities.

Что я хочу сделать, это сохранить объект Product p напрямую, чтобы не получать оригинал из ObjectSet os до этого и изменять значения -> Product original = os.Single<Project>(o => o.Id == p.Id);

Как я могу это сделать?

[EDIT]

Я попытался добавить новые элементы, и это работает

foreach (Item item in p.Items)
{
    try
    {
        dataEntities.Items.ApplyCurrentValues(item);
    }
    catch (Exception)
    {
        Items i = new Items();

        // Set prop here or make a method CopyTo()
        i.Prop = item.Prop;

        dataEntities.AddToItems(i);
    }
}
dataEntities.SaveChanges();

1 Ответ

0 голосов
/ 01 июня 2011

Нехорошо.Это возможно только с самой Product p ( обновление отсоединенной сущности ), но с элементами это действительно сложно.Проблема в том, что вы должны вручную сказать EF, какой именно элемент имеет изменения, какие новые, а также какие были удалены.Более длительное обсуждение проблема здесь .Распространенные решения:

  • Делайте это точно так же, как вы это делали в настоящее время, но вместо назначения предметов вручную сравнивайте оригинальные и полученные предметы и соответственно изменяйте загруженные предметы.Если вы не добавляете и не удаляете элементы на клиенте, это должно быть вызовом ApplyCurrentValues для каждого элемента.
  • Использование Самостоятельное отслеживание объектов ( только для клиентов .NET ).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...