Как перенести несколько значений в SetPropertyCalls для executeUpdate в EF 7C#

Место общения программистов C#
Ответить
Anonymous
 Как перенести несколько значений в SetPropertyCalls для executeUpdate в EF 7

Сообщение Anonymous »

У меня есть следующий запрос: < /p>
IQueryable query = unitOfWork.LocationRepository.Query()
.Where(x => x.ID == "{some-id}");
< /code>
Я хочу обновить свойства местоположения со значениями: < /p>
List parameters = new List
{
(x => x.Name, "New Name"), // string
(x => x.Date, DateTime.Now) // DateTime
};
< /code>
Как динамически построить SetProperty из списка выше? < /p>
query.ExecuteUpdate(sett => sett.SetProperty(... here??? ...));
< /code>
Я начал с простого: < /p>
Func func = x => x.Name;

query.ExecuteUpdate(sett => sett.SetProperty(func, "abc123"));
< /code>
Но это не удается, и я получаю system.invalidcastexception: «Невозможно разыграть объект типа 'System.linq.expressions.typedparameterexpression' type 'System.linq.expressions.lambdaexpression'. '< /p>
, когда я использую lambda непосредственно: < /p>
< /p>
, когда я использую lambda.
// This works
query.ExecuteUpdate(sett => sett.SetProperty(x => x.Name, "abc123"));

Так, как перенести несколько функций setProperty? ExecuteUpdate ().
Существует некоторая логика, реализованная в dbcontext.savechanges (), которая обновляет сущность при сохранении (установка текущего имени пользователя, последнее время обновления, ...), и я хочу одинаково для executupdate ().
Я ожидаю, что несколько свойств будут сохранены в одном и том же (максимум 5, чтобы иметь это эффективное), это то, почему я нуждаюсь в сохранении.public static async Task ExecuteUpdateCustom(this IQueryable source,
List propertiesAndValuesSet) where T : class
{
if (source is IHasUserDetails)
{
List parameters = new List
{
(x => x.UpdatedBy, getCurrentUser()),
(x => x.ModifiedTime, DateTime.UtcNow)
};

// Chain
propertiesAndValuesSet.AddRange(parameters);
}

return await source.ExecuteUpdateAsync(setters => setters.SetProperty(...propertiesAndValuesSet...));
}


Подробнее здесь: https://stackoverflow.com/questions/766 ... te-in-ef-7
Ответить

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

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

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

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

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