Я столкнулся с точно такой же проблемой при использовании EF с лямбда-выражением.Увеличение типа данных до int - это не решение и даже плохая практика.То, что я нашел и как другие сообщили здесь, это то, что вы получаете правильный код, когда вы делаете более неуклюжий подход, например:
SomeEntity.FindBy (i => новый список {1} .Contains (i.TinyintColumn))
Но когда вы столкнетесь с другими проблемами с более чем одним значением для сопоставления.Следующее не будет использовать параметризованные значения запроса, а только встроит их в тело запроса!
SomeEntity.FindBy (i => новый список {1, 2} .Contains (i.TinyintColumn))
Это не так плохо при исходной проблеме, но все же не очень хорошо, так как это означает, что база данных должна составлять план для каждой комбинации значений, которые вы к ней добавляете, и делает анализ производительности практически невозможным, поскольку нет надлежащей агрегациивремени исполнения.Он также имеет некоторые эффекты производительности, которые вы, скорее всего, не увидите в среде с высокой нагрузкой!
Не начинайте меня с того, что такого рода поведения / антишаблоны будут делать с типами данных char / nchar и их влиянием на индексы.На мой взгляд, централизация всего вокруг реализаций системы типов данных C # ограничена и вызывает серьезные проблемы.
Мой взгляд на EF состоит в том, что очень простые запросы к хорошо смоделированным таблицам преобразуются в плохой код SQL, а EF следует-patterns.Это не то, что я нахожу впечатляющим в свете обмана и дополнительной сложности в разработке, которую приносит EF!Сейчас я не буду вдаваться в подробности, поскольку это будет совершенно другое обсуждение!
Выберите любое из приведенных выше решений, но перед тем, как их использовать, узнайте недостатки.Возможно, версия 10 EF решит проблему до некоторой степени, однако я не задерживаю дыхание.