ApplyCurrentValues ​​в EF 4 - PullRequest
       22

ApplyCurrentValues ​​в EF 4

6 голосов
/ 16 февраля 2010

Я просто играл с EF 4 в VS 2010 RC и обнаружил, что ApplyCurrentValues ​​не работает, когда свойство имеет тип bool, а новое значение равно false !!! ???
и это работает, когда новое значение истинно.
Я не знаю, является ли это ошибкой или я что-то упускаю, но я просто работаю с очень уродливым решением:

public void UpdateProduct(Product updatedProduct)
    {
        using (model)
        {
            model.Products.Attach(new Product { ProductID = updatedProduct.ProductID });
            model.Products.ApplyCurrentValues(updatedProduct);
            Product originalProduct = model.Products.Single(p => p.ProductID == updatedProduct.ProductID);
            originalProduct.Discontinued = updatedProduct.Discontinued;
            model.SaveChanges();

        }

    }

есть идеи или лучше обойти?

Ответы [ 2 ]

20 голосов
/ 16 февраля 2010

Вы добавили новый Product со значениями по умолчанию для всех свойств bool (false). Затем вы устанавливаете одно из этих значений false. Не удивительно, что это не обновляет; Вы фактически не изменили это! Мне кажется, вы могли бы решить эту проблему, удалив часть кода:

public void UpdateProduct(Product updatedProduct)
{
    using (model)
    {
        Product originalProduct = model.Products.Single(p => p.ProductID == updatedProduct.ProductID);
        model.Products.ApplyCurrentValues(updatedProduct);
        model.SaveChanges();
    }
}

Даже если вам это не нравится, попробуйте и посмотрите, работает ли оно.

Теперь мне кажется, что вы пытаетесь избежать загрузки продукта в первую очередь. Но это сломало ваш код. Поэтому, хотя я и задаюсь вопросом, пытаясь «оптимизировать» обновление (вы загружаете одну запись здесь, а обновления происходят гораздо реже, чем выбирает), давайте согласимся начать с чего-то, что работает.

Если это работает, он говорит вам, что вам нужно делать, если вы настаиваете на том, чтобы не загружать продукт для обновления: вам нужно пометить все свойства как измененные .

1 голос
/ 06 января 2013

Изменено:

public void UpdateProduct(Product updatedProduct)
{
    using (model)
    {
        model.Products.Single(p => p.ProductID == updatedProduct.ProductID);
        model.Products.ApplyCurrentValues(updatedProduct);
        model.SaveChanges();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...