Я использую общий репозиторий, и мне нужно добавить дополнительный параметр в один из методов репозитория. Например, у меня есть столбец isDeleted в базе данных, я хочу добавить этот столбец как false в предикат. Как добавить дополнительный параметр в предикат из метода репозитория? Этот дополнительный параметр фиксирован для всех таблиц. (isDeleted = false)Как добавить дополнительный параметр в выражение <Func <T, bool>> предикат в общем репозитории
Это мой оригинальный метод, который получает одну запись из db.
public T GetSingle(Expression<Func<T, bool>> expression)
{
return _dbSet.Where(expression).SingleOrDefault();
}
Это обновленная версия, чтобы добавить дополнительный параметр, который я дошел до сих пор.
public T GetSingle(Expression<Func<T, bool>> expression)
{
Expression<Func<T, bool>> extra = d => d.GetType().GetProperty("isDeleted").Equals(false);
var exp = Expression.And(expression.Body, extra.Body);
var body = Expression.And(expression.Body, extra.Body);
var lambda = Expression.Lambda<Func<T, bool>>(body, extra.Parameters);
return _dbSet.Where(lambda).SingleOrDefault();
}
Но эта обновленная версия дает лямбда-тело, как это, и из-за этого оно не работает.
((d.ID == value(ProjectName.Namespace.Controllers.ControllerName).User.CompanyId) And d.GetType().GetProperty("isDeleted").Equals(Convert(False)))
У меня нет кода в руке, однако в прошлом я использовал технику столбца Id на таблицах (где каждая таблица имеет этот столбец/свойство). Я создал интерфейс, содержащийся в 'int Id {set; получить;} '. Затем я добавил этот интерфейс во все определения класса таблицы.В моем коде repostitory я установил ограничение на тип 'T', чтобы сказать, что он должен содержать этот интерфейс. Затем в моем коде я смог вывести свойство Id из моего типа «T». Я знаю, что это звучит странно, но, надеюсь, вы получите суть! –
Я просто не получаю репозитории, подобные этому, EF уже является хранилищем, и все, что им кажется, это сделать жизнь более сложной и удалить функциональность. Например, этот метод не может загружать с помощью Include. Это не так, как реально, вы можете обменять EF на другую технологию с ними. – Mant101
@ Mant101, я в настоящее время работаю над проектом, где EF нужно заменить вызовами веб-службы. Если бы оригинальные разработчики использовали бы репозитории, тогда моя жизнь была бы намного проще. –