powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF 5 - Как увеличить значение одного поля?
25 сообщений из 97, страница 1 из 4
EF 5 - Как увеличить значение одного поля?
    #38263855
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как сделать
UPDATE MyTable SET MyField = MyField + 10 WHERE MyID = 1
с помощью EF 5 + FW 4.5?
Спасибо.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38263940
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
using(var ctx = new MyContext())
{
    var obj = ctx.MyTable.Where(o => o.MyID == 1).First();
    obj.MyField += 10;
    ctx.SaveChanges();
}
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38264050
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К
Код: c#
1.
2.
3.
4.
5.
6.
using(var ctx = new MyContext())
{
    var obj = ctx.MyTable.Where(o => o.MyID == 1).First();
    obj.MyField += 10;
    ctx.SaveChanges();
}



Ужос... :)
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38264276
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУАлексей К
Код: c#
1.
2.
3.
4.
5.
6.
using(var ctx = new MyContext())
{
    var obj = ctx.MyTable.Where(o => o.MyID == 1).First();
    obj.MyField += 10;
    ctx.SaveChanges();
}



Ужос... :)

Алексей К - спасибо!
МСУ, ну блин хоть бы сказал что такого плохого в этом коде? Как лучше?
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38264336
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУЗануда!

Код: c#
1.
2.
3.
4.
5.
6.
using(var ctx = new MyContext())
{
    var obj = ctx.MyTable.First(o => o.MyID == 1);
    obj.MyField += 10;
    ctx.SaveChanges();
}
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38264367
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38265335
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему не
Код: c#
1.
var obj = ctx.MyTable.Find(1);

?
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38265460
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyа почему не
Код: c#
1.
var obj = ctx.MyTable.Find(1);

?После этого надо делать проверку на null. Ну и является ли MyID ключом мы не знаем.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38265496
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КAntonariyа почему не
Код: c#
1.
var obj = ctx.MyTable.Find(1);

?После этого надо делать проверку на null.А если MyID = 1 не существует, First не null вернет?
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38265562
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyАлексей Кпропущено...
После этого надо делать проверку на null.А если MyID = 1 не существует, First не null вернет?FirstOrDefault вернёт null. В First будет Exception.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38265659
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, ну да. Я же уже юзал оба.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267069
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КМСУЗануда!

Код: c#
1.
2.
3.
4.
5.
6.
using(var ctx = new MyContext())
{
    var obj = ctx.MyTable.First(o => o.MyID == 1);
    obj.MyField += 10;
    ctx.SaveChanges();
}



Хорошо, а как сделать несколько таких вызовов в одну транзакцию?

Я примеры про TransactionScope нашёл.
Мне интересно знать сколько раз выполнять ctx.SaveChanges();, один раз хватит в конце или для каждой таблицы?
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
  using (TransactionScope transaction = new TransactionScope())
            {
using(var ctx = new MyContext())
{
    var obj = ctx.MyTable.First(o => o.MyID == 1);
    obj.MyField += 10;
    ctx.SaveChanges();

var obj2 = ctx.MyTable2.First(o => o.MyID == 1);
    ob2j.MyField += 10;
    ctx.SaveChanges();

var ob3j = ctx.MyTable3.First(o => o.MyID == 1);
    obj3.MyField += 10;
    ctx.SaveChanges();

transaction.Complete();
}
}
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267098
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234,

Выполните 1 раз в конце, и TransctionScope не потребуется.
P.S. Могу ошибаться, но при использовании TS надо явно соединение открывать внутри него.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267117
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234Мне интересно знать сколько раз выполнять ctx.SaveChanges();, один раз хватит в конце или для каждой таблицы? Сколько надо, столько и делайте. Часто нужно из одной таблицы получить новые id, чтобы вставить их в другую, а без промежуточного SaveChanges им взяться неоткуда. Такие случаи как раз и заворачиваются в TransactionScope, если того требуют условия целостности.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267140
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

AntonariyЧасто нужно из одной таблицы получить новые id, чтобы вставить их в другую

Достаточно присвоить значение свойству навигации, ID будет сам подставлен при вставке.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267146
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchP.S. Могу ошибаться, но при использовании TS надо явно соединение открывать внутри него.Наоборот, перед ним. И закрывать после. Иначе будет распределённая транзакция.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267189
cooldeveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо в данном случае TransactionScope, после одного SaveChanges всё отправится батчем на сиквел сервер в единой транзакции по умолчанию.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267217
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cooldeveloperНе надо в данном случае TransactionScope, после одного SaveChanges всё отправится батчем на сиквел сервер в единой транзакции по умолчанию.

Да, всем спасибо - так действительно работает.
Теперь ДРУГОЙ ВОПРОС:
Что то у меня INSERT не делается.
У меня в этой транзакции два UPDATE и один INSERT.

INSERT делаю так:

Код: c#
1.
2.
ctx.MyOtherTable.Add(new MyOtherTable { Field1 = 1, Field2 = "test"});
ctx.SaveChanges();



Получаю исключение которое не могу прочитать, потому как этото метод он в WCF-Сервисе.
Подозреваю что проблема в том что я не задаю значения для ещё 2ух полей:
id - int Autoincrement KEY
Created - тип DateTime Default - GetDate()

В нормальном SQL-Запросе я бы их и указывать не стал бы
id - автоматически присвоится при в ставке, и Created тоже - будет втавлена текущее DateTime

А вот как в EF 5 это делается?
Спасибо.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267221
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234,


M234Получаю исключение которое не могу прочитать, потому как этото метод он в WCF-Сервисе.

Что мешает на сервисе исключение посмотреть?
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267230
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchM234,


M234Получаю исключение которое не могу прочитать, потому как этото метод он в WCF-Сервисе.

Что мешает на сервисе исключение посмотреть?

Отсутствие ноухау - не знаю как и отсутсвие времени в данный момент на поиски.

Проблему я прояснил: Если добавить ещё и поле Created = DateTime.Now то INSERT отрабатывает без ошибок.
Но ВОПРОС остался: А можео как-то сделать так что бы Default-Значение определённое в таблице для этого поля вставлялось?
Пробовал Created = null - даже не компилируется.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267237
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M234,

http://www.gotdotnet.ru/forums/1/136155/

1) DefaultValue надо заполнить в моделе
2) DateTime, похоже, из каробки, не поддерживается.
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267238
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
коробки*
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267242
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно еще изменить StoreGeneratedPattern на Computed, если не надо менять значение из кода
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267245
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
EF 5 - Как увеличить значение одного поля?
    #38267247
M234
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за информацию.
Я понял - это недоделка MS или кто там над EF работает.
Ладно, бум выкручиваться как-нибудь.
В данном конкретном случае меня устроит Created = DateTime.Now, но вообще конечно это серьёзная проблемка...
Ждём EF 6 ;)
...
Рейтинг: 0 / 0
25 сообщений из 97, страница 1 из 4
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF 5 - Как увеличить значение одного поля?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]