Когда я называю DbSet.FirstOrDefault()
пропусканием предикат, который сравнивает общий тип TId
, я получаю следующее исключение:Как запросить EntityFramework, используя общий тип свойства?
не удалось создать постоянное значение типа 'System.Object. только В этом контексте поддерживаются примитивные типы или типы перечислений.
Интерфейс типа выполняется запрос:
interface IEntity<TId>
{
TId id { get; set; }
}
Исключение брошено здесь:
public virtual TEntity Get<TEntity, TId>(TId id) where TEntity : class, IEntity<TId>
{
return dbContext.Set<TEntity>().FirstOrDefault(e => e.Id.Equals(id));
}
функция будет работать только тогда, когда TId
ограничен в struct
. Как включить string
в качестве поддерживаемого типа? Если это невозможно, можно ли выполнить задачу по-другому?
Как я могу продлить его на работу для массивов этих примитивов тоже? Пример: int [] и строка []. Благодарю. – user845279
Я не думаю, что вы можете. Равенство для множеств (RDBMSs не имеет понятия массивов) слишком велико, и в SQL нет прямой поддержки '==' -like. Рассмотрим, например, '[1,2]' и '[2,1]'. Они равны вам? Является ли заказ важным? Что относительно '[null, 1]' и '[null, 1]'? Вы беспокоитесь о тройной логике здесь или нет и т. Д. – UserControl
Я работаю с MS Sql, который имеет тип Binary []. Он преобразуется в System.Byte []. – user845279