Qual è il modo corretto di utilizzare Effort con Entity Framework 6?

c# effort entity-framework entity-framework-6 linq

Domanda

Sto provando a far funzionare il codice di prova utilizzando il fornitore di dati Effort con Entity Framework 6. Quello che sto cercando di fare sembra che dovrebbe essere il caso d'uso assoluto più semplice, ma non sono in grado di ottenere cose da lavoro.

Ecco la mia 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 è definita come:

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'attributo [FitsKeyword] è un attributo personalizzato che ho definito e non dovrebbe avere alcuna rilevanza su Entity Framework.

Nei miei test di unità, ho impostato la mia connessione dati in questo modo, come mostrato nella guida rapida di 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; }
    }

Non appena utilizzo LINQ su DbSet, ottengo stupidi messaggi di errore privi di significato. Ad esempio, quando passo il mio repository in questo codice banale:

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

Quando eseguo questo codice, ottengo:

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

Ora questo è un codice LINQ incredibilmente semplice, cosa mi manca qui?

Risposta accettata

Non è possibile confrontare oggetti personalizzati in una query LINQ. È necessario confrontare solo il tipo primitivo (int, string, ecc.).

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

Puoi ottenere alcune informazioni qui: solo i tipi primitivi o tipi di enumerazione sono supportati in questo contesto




Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché