Dans ma base de données, j'ai des tables qui ont un attribut int DeleteState
. Je veux une méthode générique pour interroger ces tables. En d'autres termes, une méthode qui fait cela: Context.Table.Where(x => x.DeleteState == 0)
.Méthode de requête générique dans Entity Framework
Je pensais que je pouvais le faire:
public static class Extensions
{
public static IQueryable<T> Exists<T>(this IQueryable<T> qry) where T : IDeletable
{
return qry.Where(x => x.DeleteState == 0);
}
}
Où IDeletable
est la suivante:
public interface IDeletable
{
int DeleteState { get; set; }
}
Maintenant, je ne dispose que d'ajouter le IDeletable
dans le modèle EF:
public partial class Table : EntityObject, IDeletable { ... }
Je l'ai fait avec le mécanisme de modèle.
Malheureusement, cela ne fonctionne pas :(Il compile très bien, mais jette à l'exécution:
Unable to cast the type 'Table' to type 'IDeletable'. LINQ to Entities only supports casting Entity Data Model primitive types
si je l'appelle comme ça:
Context.Table.Exists();
Comment puis-je résoudre ce Pourriez-vous penser à un correctif ou à une méthode différente pour obtenir des résultats similaires? Thx
Si votre solution fonctionne erreur que vous aviez à l'exécution ne me semble pas bon. – Vince
@vince: veuillez élaborer.Les exceptions ne sont pas bonnes en général :) – duedl0r
Votre solution fonctionne-t-elle? avez-vous essayé le mien? Je viens de dire que si cela fonctionne par la classe addind à la contrainte générique, l'erreur "LINQ to Entities ne supporte que le cast des types primitifs Entity Data Model" n'a pas de sens. Cela n'a pas vraiment d'importance, ce ne sera pas la première exception sans ^^ – Vince