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

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

Сообщение Гость »

У меня следующий запрос:
IQueryable query = unitOfWork.LocationRepository.Query()
.Where(x => x.ID == "{some-id}");

Я хочу обновить свойства местоположения, добавив значения:
List parameters = new List
{
(x => x.Name, "New Name"), // string
(x => x.Date, DateTime.Now) // DateTime
};

Как динамически создать SetProperty из списка выше?
query.ExecuteUpdate(sett => sett.SetProperty(... here??? ...));

Я начал с простого:
Func func = x => x.Name;

query.ExecuteUpdate(sett => sett.SetProperty(func, "abc123"));

Но это не удается, и я получаю System.InvalidCastException: «Невозможно привести объект типа «System.Linq.Expressions.TypedParameterExpression» к типу «System.Linq.Expressions.LambdaExpression».»
Когда я использую лямбду напрямую:

// This works
query.ExecuteUpdate(sett => sett.SetProperty(x => x.Name, "abc123"));

Так как же передать несколько Func в SetProperty?
Обновление 7/7: Добавлен контекст:< /p>
Я создаю метод расширения для повышения производительности приложения.
Вместо того, чтобы загружать объект, изменять одно свойство и сохранять его, я хочу установить значение свойства и быстро сохранить его с помощью EF7 ExecuteUpdate().
В DbContext.SaveChanges() реализована некоторая логика, которая обновляет объект при сохранении (установка текущего имени пользователя, времени последнего обновления,...), и я хочу то же самое для ExecuteUpdate().
Я ожидаю, что одновременно будет сохранено несколько свойств (максимум 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#»