Loupe

EF CORE 2.1 - Astuce AmbiguousMatchException

Un petit article pour vous faire partager l'astuce trouvée par Thomas Ouvré (il n'avait pas envie d'écrire un article, du coup je me présente en tant que scribe).

Otis

Dans un de nos projets, nous sommes passés de EF CORE 2.0 à EF CORE 2.1, à la compilation, aucun soucis de détecté, cependant au runtime, nous avions une exception de type "System.Reflection.AmbiguousMatchException" qui apparaissait, avec comme détail "Ambiguous match found", ce qui n'est pas très explicite ... 

Après quelques heures de test, de recherche sur internet, et de dichotomie, il semblerait que EF CORE 2.1 fonctionne différemment de la version précédente concernant la création des modèles. En effet, dans notre projet, nous avons opté pour la déclaration de modèle en API Fluent comme suit.

Nous avons la classe suivante de déclarée :

public class MaClasse
{
    public Guid Id { get; set; }
    public JObject MonObjet { get; set; }
}

Et nous avons dans la méthode OnModelCreating de notre modèle, le code suivant :

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    var maClasseMapping = modelBuilder.Entity<MaClasse>();
    maClasseMapping
        .HasKey(p => p.Id);
    maClasseMapping
        .Ignore(p => p.MonObjet);
}

Jusque-là, il n'y a aucun problème à vue d’œil, mais baliverne ! 

EF CORE 2.1 doit scanner en amont les classes mappées, et les entités liées (ici un JObject) en profondeur et faire une première version de son modèle, tout cela avant de passer par la méthode OnModelCreating. Dans notre cas, il essaie donc de mapper la classe JObject (alors que nous l'ignorons explicitement ensuite). Pour y remédier, il faut donc ... utiliser les attributs ! Dans notre cas, l'attribut "NotMapped" comme ceci:

public class MaClasse
{
    public Guid Id { get; set; }
    [NotMapped]
    public JObject MonObjet { get; set; }
}

Avec l'ajout de l'attribut, plus aucun problème au runtime. J'espère que cette astuce trouvée par Thomas, vous fera gagner du temps, le temps que ce comportement soit corrigé.

Photo de profil

Ces billets pourraient aussi vous intéresser

Vous nous direz ?!

Commentaires

comments powered by Disqus