Как обновить отдельный столбец в LINQ, не загружая всю строку?

Вы определяете шаблон данных, содержащий дочернее представление для модели дочернего представления.

Редактировать: навигация просмотра модели сначала хороша в контексте mvvm. Фактически, можно утверждать, что локатор модели представления может быть плохим стилем ... но он настолько удобен и настолько широко используется сегодня, что это не имеет значения.

7
задан Sam 21 October 2008 в 11:55
поделиться

2 ответа

Общий идиом в Obj-C должен иметь конкретные имена для обратных вызовов для определенных событий. (Например, parserDidBeginDocument: от NSXMLParserDelegate ). Если действительно нужно уметь указывать имена, вполне вероятно, что единственным решением будет добавление имен селекторов как @ «mySelector: wityArgument: context:» или somesuch.

-121--2293984-

Наиболее простой реализацией является структура списка смежности :

id  parent_id  data

Однако некоторые базы данных, в частности MySQL , имеют некоторые проблемы в работе с этой моделью, потому что она требует возможности выполнения рекурсивных запросов, которых MySQL не хватает.

Другая модель - это вложенные наборы :

id lft rgt data

, где lft и rgt - произвольные значения, определяющие иерархию (любой дочерний lft , rgt должен находиться в пределах любого родительского lft , rgt )

Однако в MySQL это может быть улучшено с помощью abitilies SPATIAL .

См. следующие статьи в моем блоге:

для получения более подробных объяснений.

-121--1208763-

ligget78 дал мне другую идею, как сделать обновление одного столбца:

Создайте новый DataContext только для этого вида обновления и включите только необходимые столбцы в этот DataContext.

Таким образом ненужные столбцы даже не будут загружены и, конечно, не будут отправлены обратно в базу данных.

0
ответ дан 7 December 2019 в 05:33
поделиться

Необходимо установить UpdateCheck на всех свойствах класса Статьи кроме первичного ключа (нажмите на свойство класса в разработчике LINQ2SQL и переключитесь на Окно инструментов Свойств) к Никогда (не уверенный в WhenChanged, возможно, который работает также - идут вперед и экспериментируют с ним!).

Это вынудит LINQ2SQL использовать

UPDATE ... SET ... WHERE ID = @2

вместо долгой версии со всеми столбцами в операторе Where:

  UPDATE ... SET ... WHERE ID = @2 AND ItemsInStock = @1 AND SomeOtherColumn = @3 AND...

Теперь можно использовать код как

context.Articles.Attach(article /* article with updated values */, new Article { ID = articleID, ItemsInStock = -1 } /* pretend that this is the original article */);
context.SubmitChanges();

В основном Вы указываете, что только свойство ItemsInStock изменилось - другие опоры должны иметь то же значение по умолчанию, articleID, конечно, являющийся тем же.

Примечание: Вы не должны выбирать статью до этого.

9
ответ дан 7 December 2019 в 05:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: