Entity Framework 6で作業を行う正しい方法は何ですか?

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

質問

Entity Framework 6でEffortデータプロバイダを使用していくつかのテストコードを使用しようとしています。私がしようとしているのは、それが絶対的な最も単純なユースケースであるように思えますが、作業。

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

POCOエンティティは次のように定義されます。

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

[FitsKeyword]属性は、私が定義したカスタム属性であり、Entity Frameworkとは関係ありません。

私の単体テストでは、このようなデータ接続を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; }
    }

DbSetでLINQを使用するとすぐに、私は愚かな無意味なエラーメッセージを受け取ります。たとえば、私のリポジトリをこの簡単なコードに渡すと、次のようになります。

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

このコードを実行すると、次のようになります。

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

今、これは無意味な単純なLINQコードですが、私はここで何が欠けていますか?

受け入れられた回答

LINQクエリのカスタムオブジェクトを比較することはできません。プリミティブ型(int、stringなど)のみを比較する必要があります。

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

ここでいくつかの情報を得ることができます: プリミティブ型または列挙型のみがこのコンテキストでサポートされています




ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ