Можно ли установить значение свойства SetProperty в ExecuteUpdate() из коллекции значенийC#

Место общения программистов C#
Ответить
Anonymous
 Можно ли установить значение свойства SetProperty в ExecuteUpdate() из коллекции значений

Сообщение Anonymous »

Я использую Entity Framework Core 7, но я новичок в этом.
Мой сценарий выглядит следующим образом. Пользователи вводят отредактированную информацию через пользовательский интерфейс, который хранится в экземплярах класса сущностей Upload.
Потенциально у меня может быть много отредактированных сущностей, поэтому я был рад найти ExecuteUpdate (), который будет выполнять только один вызов БД, а не один вызов для каждой сущности, как это было бы при использовании ChangeTracking и SaveChanges.
Однако , я не могу найти в коде способ установить значение для каждого из отредактированных свойств для каждого соответствующего объекта.
Вот мой код (не работает):

Код: Выделить всё

var editedUploads = editViewModel.SelectedIncomingStatements
.Select((d,Index) => new Upload() { Id = d.Id , BankRoyaltiesReceived = d.BankRoyaltiesReceived, ExchangeRate = d.ExchangeRate, Tag = Index});

var editedUploadIds = editedUploads.Select(u => u.Id).ToHashSet();

var erColl = new Collection(editedUploads.Select(u => u.ExchangeRate).ToList());
var rrColl = new Collection(editedUploads.Select(u => u.BankRoyaltiesReceived).ToList());

using (var trans = await ctx.Database.BeginTransactionAsync(cancellationToken))
{
try
{
var q = from u in ctx.Uploads
let c = editedUploadIds.Contains(u.Id)
where c == true
select u;

await q.ExecuteUpdateAsync(setters => setters.SetProperty(p => p.BankRoyaltiesReceived, u => rrColl[(int)u.Tag]).SetProperty(p => p.ExchangeRate, u => erColl[(int)u.Tag]));

await trans.CommitAsync(cancellationToken);
}
catch (Exception)
{
await trans.RollbackAsync(cancellationToken);
throw;
}
}
Основная проблема заключается в том, что я могу «индексировать» значения из двух коллекций exColl и rrColl в SetProperty' s, чтобы я применял правильное отредактированное значение для соответствующей загрузки.
К счастью, похоже, что коллекции переводятся с помощью EF Core, поэтому их использование кажется нормальным. Я проверил это на коллекциях и жестко закодированных индексах, которые сработали. Изначально я пробовал использовать словари, но, согласно документации, это пока запрещено.
Поэтому я хочу предоставить коллекциям индексы, которые нормально транслируются для EF Core.
Как видно из кода, моей последней попыткой было добавить атрибут [NotMapped] к свойству .Tag объекта Upload и установить его с индексом, который понадобится из 2-х коллекций. К сожалению, это не сработало, поскольку перевод EF жалуется, что .Tag имеет значение [NotMapped] !
Итак, я застрял в том, как установить несколько свойств для несколько объектов, использующих ExecuteUpdate().
Я чувствую, что упускаю что-то очевидное, поскольку думаю, что этот сценарий - именно то, для чего нужен ExecuteUpdate()?
Есть предложения?
Заранее благодарим за любую помощь.

Подробнее здесь: https://stackoverflow.com/questions/781 ... pdate-from
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»