¿Cuál es la forma correcta de usar Effort con Entity Framework 6?


Pregunta

Estoy tratando de hacer funcionar un código de prueba utilizando el proveedor de datos de Effort con Entity Framework 6. Lo que estoy tratando de hacer parece ser el caso de uso más simple, pero no puedo hacer nada. trabajo.

Aquí está mi clase 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; }
    }

La entidad POCO se define como:

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; }
    }

El atributo [FitsKeyword] es un atributo personalizado que he definido y no debería tener ninguna relación con Entity Framework.

En mis pruebas de unidad, configuro mi conexión de datos de esta manera, como se muestra en la guía de inicio rápido de 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; }
    }

Tan pronto como uso cualquier LINQ en el DbSet, recibo mensajes de error sin sentido estúpidos. Por ejemplo, cuando paso mi repositorio a este código 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; }
    }

Cuando ejecuto este código, obtengo:

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; }
    }

Ahora, este es un código LINQ bastante simple, ¿qué me estoy perdiendo aquí?

Respuesta aceptada

No puede comparar objetos personalizados en una consulta LINQ. Debes comparar solo el tipo primitivo (int, string, etc).

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

Puede obtener información aquí: solo los tipos primitivos o los tipos de enumeración son compatibles en este contexto





Licencia bajo: CC-BY-SA
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué