Wie kann Effort mit Entity Framework 6 korrekt verwendet werden?


Frage

Ich versuche, Testcode mit dem Entity Framework 6 zu erstellen. Was ich versuche, scheint der einfachste Anwendungsfall zu sein, aber ich bin einfach nicht in der Lage, Dinge zu erledigen Arbeit.

Hier ist meine DbContext-Klasse:

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

Die POCO-Entität ist definiert als:

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

Das Attribut [FitsKeyword] ist ein benutzerdefiniertes Attribut, das ich definiert habe und das keine [FitsKeyword] auf Entity Framework haben sollte.

In meinen Komponententests richte ich meine Datenverbindung so ein, wie in der Schnellstartanleitung zu Effort gezeigt:

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

Sobald ich ein LINQ auf dem DbSet verwende, bekomme ich dumme sinnlose Fehlermeldungen. Zum Beispiel, wenn ich mein Repository in diesen trivialen Code übergebe:

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

Wenn ich diesen Code ausführe, bekomme ich:

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

Nun, das ist ziemlich simpler LINQ-Code, was fehlt mir hier?

Akzeptierte Antwort

Sie können benutzerdefinierte Objekte in einer LINQ-Abfrage nicht vergleichen. Sie sollten nur den primitiven Typ (int, string usw.) vergleichen.

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

Sie können hier einige Informationen erhalten: In diesem Kontext werden nur primitive Typen oder Aufzählungstypen unterstützt





Lizenziert unter: CC-BY-SA
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum