ef core update 0 rows
От: dsalodki Беларусь http://dsalodki.wix.com/resume
Дата: 31.12.21 08:16
Оценка:
как переписать на ef core ?
в частности интересует update когда 0 записей обновлено

я думал так
            using(var context = new CoinDogsContext(AppSettingsReader.GetConnectionString()))
            {
                var settings = new Setting { Name = name };
                context.Settings.Attach(settings);
                settings.Value = val;
                var rowcount = context.SaveChanges();
                if(rowcount == 0)
                {
                    settings = new Setting { Name = name, Value = val };
                    context.Settings.Add(settings);
                    context.SaveChanges();
                }

но получаю ошибку здесь (var rowcount = context.SaveChanges()
Microsoft.EntityFrameworkCore.DbUpdateConcurrencyException: 'The database operation was expected to affect 1 row(s), but actually affected 0 row(s); data may have been modified or deleted since entities were loaded. See http://go.microsoft.com/fwlink/?LinkId=527962 for information on understanding and handling optimistic concurrency exceptions.'

$"update settings set value={Safe(val)} where name='{name}';if @@ROWCOUNT=0 insert into settings (name,value) values ({Safe(name)},{Safe(val)})"
Re: ef core update 0 rows
От: Danchik Украина  
Дата: 31.12.21 10:05
Оценка: 5 (1)
Здравствуйте, dsalodki, Вы писали:

[Skip]

D>
D>$"update settings set value={Safe(val)} where name='{name}';if @@ROWCOUNT=0 insert into settings (name,value) values ({Safe(name)},{Safe(val)})"
D>


Ты хочешь UPSERT, его в EF Core нету
Тока так
using(var context = new CoinDogsContext(AppSettingsReader.GetConnectionString()))
using(var tran = context.Database.BeginTransaction(IsolationLevel.Serializable))
{
    var settings = context.Settings.FirstOrDefault(x => x.Name == name);
    if (settings == null)
    {
        settings = new Setting { Name = name };
        context.Settings.Add(settings);
    }

    settings.Value = val;
    context.SaveChanges();

    tran.Commit();
}
Re[2]: ef core update 0 rows
От: dsalodki Беларусь http://dsalodki.wix.com/resume
Дата: 31.12.21 10:49
Оценка:
Здравствуйте, Danchik, Вы писали:

D>Ты хочешь UPSERT, его в EF Core нету

D>Тока так...

спасибо, так и сделал
Отредактировано 02.01.2022 1:04 VladD2 . Предыдущая версия .
Re[3]: ef core update 0 rows
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.01.22 01:05
Оценка: +1
Здравствуйте, dsalodki, Вы писали:

D>спасибо, так и сделал


Для "спасибо" тут оценки придуманы. Зачем так оверквотить?
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.