La propriété d'instance n'est pas définie pour le type "System.Int64"

J'utilise un model de référentiel pour accéder aux données à l'aide d'Entity Framework. J'ai implémenté tout correctement (je pense) en utilisant une architecture d'oignon, mais quand j'exécute des tests j'obtiens l'erreur:

Instance Property 'IDDocument' is not defined for type 'System.Int64' 

(à peu près traduit du français)

La méthode que je teste est la suivante:

 public T Get(long id) { ObjectContext objContext = ((IObjectContextAdapter)context).ObjectContext; ObjectSet<T> set = objContext.CreateObjectSet<T>(); IEnumerable<ssortingng> keyNames = set.EntitySet.ElementType .KeyMembers .Select(k => k.Name); if (keyNames.Count() > 1) return null;//Que faire quand il ya plusieurs keys? else { ssortingng idName = keyNames.ElementAt(0); // For Document would be IDDocument var parameter = Expression.Parameter(id.GetType()); var property = Expression.Property(parameter, idName); var idValue = Expression.Constant(id, id.GetType()); var equal = Expression.Equal(property, idValue); var predicate = Expression.Lambda<Func<T, bool>>(equal, parameter); return entities.SingleOrDefault(predicate); } } 

Mes tables ont des noms d'identification différents pour des raisons que je n'expliquerai pas, mais c'est pourquoi j'ai utilisé le générateur Expression pour append des parameters et ensuite utiliser un prédicat pour récupérer mon résultat. Vous pouvez voir cette méthode dans ce post: Un référentiel générique a-t-il besoin d'une class d'entité de base à appliquer partout?

IDDocument est déclaré de la manière suivante dans le POCO de mes entités EF:

 [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public long IDDocument { get; set; } 

Et quand je l'appelle dans mon test:

 [TestMethod] public void IdExistsGetTest() { long valueToCheck = 1L; repo = new Repository<Web_Documents>(context); var test = repo.Get(valueToCheck); test.Should().BeOfType(typeof(Web_Documents)); } 

context définit mon dbcontext (instancié avant).

Maintenant, quand je lance les tests, je reçois toujours l'exception ArgumentException ci-dessus, aucune idée de ce qui me manque? Je pense que le problème réside dans la méthode Get (long id), car si je change le code sans Expression , cela fonctionne bien (mais pas comme je le veux!). Merci

Je pense:

 var parameter = Expression.Parameter(id.GetType()); 

Devrait être:

 var parameter = Expression.Parameter(typeof(T));