Quelle est la bonne façon d'utiliser Effort avec Entity Framework 6?


Question

J'essaie de faire fonctionner un code de test à l'aide du fournisseur de données Effort avec Entity Framework 6. Ce que j'essaie de faire semble être le cas d'utilisation le plus simple, mais je ne parviens pas à obtenir des résultats satisfaisants. travail.

Voici ma classe DbContext:

public class CcdReductionFrameCatalogue : DbContext
    {
    public CcdReductionFrameCatalogue()
        : this("name=CcdReductionFrameCatalogue") {}

    public CcdReductionFrameCatalogue(string connectionString) : base(connectionString) {}

    public CcdReductionFrameCatalogue(DbConnection connection) : base(connection, true) {}

    public virtual DbSet<CcdFrame> CcdFrames { get; set; }
    }

L'entité POCO est définie comme:

public class CcdReductionFrameCatalogue : DbContext
    {
    public CcdReductionFrameCatalogue()
        : this("name=CcdReductionFrameCatalogue") {}

    public CcdReductionFrameCatalogue(string connectionString) : base(connectionString) {}

    public CcdReductionFrameCatalogue(DbConnection connection) : base(connection, true) {}

    public virtual DbSet<CcdFrame> CcdFrames { get; set; }
    }

L'attribut [FitsKeyword] est un attribut personnalisé que j'ai défini et ne devrait avoir aucune incidence sur Entity Framework.

Dans mes tests unitaires, j'ai configuré ma connexion de données comme suit, comme indiqué dans le guide de démarrage rapide Effort:

public class CcdReductionFrameCatalogue : DbContext
    {
    public CcdReductionFrameCatalogue()
        : this("name=CcdReductionFrameCatalogue") {}

    public CcdReductionFrameCatalogue(string connectionString) : base(connectionString) {}

    public CcdReductionFrameCatalogue(DbConnection connection) : base(connection, true) {}

    public virtual DbSet<CcdFrame> CcdFrames { get; set; }
    }

Dès que j'utilise un LINQ sur le DbSet, je reçois des messages d'erreur stupides et sans signification. Par exemple, lorsque je passe mon référentiel dans ce code trivial:

public class CcdReductionFrameCatalogue : DbContext
    {
    public CcdReductionFrameCatalogue()
        : this("name=CcdReductionFrameCatalogue") {}

    public CcdReductionFrameCatalogue(string connectionString) : base(connectionString) {}

    public CcdReductionFrameCatalogue(DbConnection connection) : base(connection, true) {}

    public virtual DbSet<CcdFrame> CcdFrames { get; set; }
    }

Quand je lance ce code, je reçois:

public class CcdReductionFrameCatalogue : DbContext
    {
    public CcdReductionFrameCatalogue()
        : this("name=CcdReductionFrameCatalogue") {}

    public CcdReductionFrameCatalogue(string connectionString) : base(connectionString) {}

    public CcdReductionFrameCatalogue(DbConnection connection) : base(connection, true) {}

    public virtual DbSet<CcdFrame> CcdFrames { get; set; }
    }

Maintenant, c’est un code LINQ incroyablement simple, que me manque-t-il ici?

Réponse acceptée

Vous ne pouvez pas comparer des objets personnalisés dans une requête LINQ. Vous devez comparer uniquement le type primitif (int, chaîne, etc.).

var existingFrames = from frame in repository.CcdFrames
                     where frame.Id == newFrame.Id
                     select frame;

Vous pouvez obtenir des informations ici: Seuls les types primitifs ou les types d’énumération sont pris en charge dans ce contexte.





Sous licence: CC-BY-SA
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi