2016-06-24 23 views
0

我有一個很難在連接到的SQLite數據庫實體框架核心RC2決賽產生用流利的API正確過濾的SQL查詢。如何LINQ過濾器上的多個GUID立刻產生適當的SQL 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項。關於Sqlite的Guid存儲在Blob上,儘管EF-Core似乎很好地處理單個項目過濾器的過濾器,但在這種情況下它似乎無法處理它。

我怎樣才能解決這個問題,知道我需要它是一個SQL操作?

ps:我想要的最後一件事是EF Core從db下載整個Thing集合,然後過濾它!這對我來說會是瘋狂的。

回答

0

這是問題#5801。不幸的是,它不會被修復爲1.0.0版本。要解決該問題,請將列映射到byte[]屬性。

+0

好的,謝謝你的反饋。將列映射到'byte []'屬性將是我項目中的一項重要工作。我們有近100個實體,每個實體至少有2個Guid。許多許多這些指導參考。如果不仔細觀察如何繼續下一步,它已經可以預見到一個很好的頭痛。 「現在」(tm)我可能會像'externalList.Foreach(externalItem => db.Things.Where(o => externalItem.Id == o.Id))'''一樣發生像差。 , 對 ? :) – DarkUrse

+0

現在修復也在[nightly builds](http://myget.org/gallery/aspnetvnext),如果這是一個選項... – bricelam

+0

是的,確實好多了。我知道我們距版本1.0.1的生產時間還很遙遠,但是你認爲官方nuget版本將在9月份之前上市嗎?與此同時,我會接受這個答案,因爲這是目前最好的選擇。 – DarkUrse