В моей БД у меня есть таблицы, у которых есть атрибут int DeleteState
. Я хочу, чтобы общий метод запрашивал эти таблицы. Другими словами, метод, который делает это: Context.Table.Where(x => x.DeleteState == 0)
.Общий метод запросов в Entity Framework
Я думал, что я мог бы сделать это:
public static class Extensions
{
public static IQueryable<T> Exists<T>(this IQueryable<T> qry) where T : IDeletable
{
return qry.Where(x => x.DeleteState == 0);
}
}
Где IDeletable
это:
public interface IDeletable
{
int DeleteState { get; set; }
}
Теперь я только добавить IDeletable
в модели EF:
public partial class Table : EntityObject, IDeletable { ... }
Я сделал это с помощью механизма шаблонов.
К сожалению, это не работает :(Это компилируется нормально, но броски во время выполнения:
Unable to cast the type 'Table' to type 'IDeletable'. LINQ to Entities only supports casting Entity Data Model primitive types
, если я называю это так:
Context.Table.Exists();
Как я могу решить эту проблему проблема? Не могли бы вы придумать исправление или другой метод для достижения аналогичных результатов? Thx
Если ваше решение работает с ошибкой, которую вы имели во время выполнения, мне не кажется хорошо. – Vince
@ vince: пожалуйста уточните.Исключения вообще не хороши :) – duedl0r
Работает ли ваше решение? ты пытался мой? Я просто сказал, что если он работает с помощью класса addind с общим ограничением, ошибка «LINQ to Entities поддерживает только приведение примитивных типов данных Entity Data Model» не имеет смысла. Это не имеет большого значения, это не будет первое исключение без ^^ – Vince