2016-06-24 3 views
0

私はsqliteのデータベースに接続Entity FrameworkのコアRC2-最終に堪能APIで適切にフィルタ処理SQLクエリを生成するに苦労しています。私は私が提供するブックのスタッシュリストにあるすべての書籍のためのデータベースを照会する必要が一度適切なSQLを生成し、複数のGUIDにフィルタをLINQする方法where句

public class Thing 
{ 
    [Required, Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid Id { get; set; } 

    public string Name { get; set; } 
} 

は、私は次のような単純な実体を持っています。これまでのところ、簡単に聞こえます。

// 'GetShortListFromSomewhere' returns 2 items that ALREADY exist in db 
List<Thing> externalList = GetShortListFromSomewhere(); 
var result = db.Things.Where(thing => externalList.Contains(o.Id)).ToList(); 

しかし、次のクエリは、一種の正しいと種類の.. sqliteのためではありませんが生成される:これは、我々はそれを書くことができる方法である

SELECT "o"."Id", "o"."Name" FROM "Thing" AS "o" 
    WHERE "o"."Id" IN ('7edbc016-abfa-4005-83d1-b39618b047df', '2def16bb-4203-417d-847c-7bdf053a00e8') 

コードで期待されるように、このIdsは完全に有効ですが、私は0個のアイテムを返します。 Blobに格納されているSqliteのGuidとEF-Coreは単一項目フィルタのフィルタをうまく処理しているようですが、この場合は処理していないようです。

この問題を回避するには、SQL操作である必要があることを知りますか。

ps:私が望む最後のものは、EF CoreがデータベースからThingコレクション全体をダウンロードしてフィルタリングすることです。私の場合、それは狂気になるでしょう。

答えて

0

これは問題#5801です。残念ながら、1.0.0リリースでは修正されません。これを回避するには、列をbyte[]のプロパティにマップします。

+0

フィードバックに感謝します。私のプロジェクトでは、列を 'byte [] 'プロパティにマッピングすることは大きな仕事になるでしょう。エンティティごとに少なくとも2つのGuidsを持つ100個のエンティティがあります。これらのガイドには多くの言及があります。次に進む方法をあまりにも近づかずに、それはすでに頭がおかしいと予見することができます。 "今のところ"(tm)私は 'externalList.Foreach(externalItem => db.Things.Where(o => externalItem.Id == o.Id))'のような異常に行きます。 、 右 ? :) – DarkUrse

+0

修正プログラムは[夜間ビルド](http://myget.org/gallery/aspnetvnext)にもあります(オプションの場合)... – bricelam

+0

はい、はるかに良い。私たちがバージョン1.0.1の制作時間から遠く離れていることは分かっていますが、9月までに公式のナゲットバージョンが提供されると思いますか?その間、私はこの時点で最良の選択肢であるので、この回答を受け入れます。 – DarkUrse

関連する問題