簡體   English   中英

Linq到where子句中的EF guid始終返回null

[英]Linq to EF guid in where clause always returns null

我嘗試了許多不同的方法,LINQ語句中的“ topic”始終為null。 將GUID與SQLite作為數據源進行比較時,有什么特別的事情要做嗎?

    public TopicModel GetTopicModel(Guid id)
    {
        TopicModel topicModel = null;
        using (var context = new onenessEntities())
        {
            var topic = context.Topics.FirstOrDefault(x => x.Id.Equals(id));

            if (topic != null)
            {
                topicModel = new TopicModel
                {
                    Id = topic.Id,
                    Description = topic.Description,
                    Title = topic.Title
                };
            }
        }

        return topicModel;
    }

自動生成的SQL

SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[CategoryId] AS [CategoryId], 
[Extent1].[Language] AS [Language], 
[Extent1].[Title] AS [Title], 
[Extent1].[Description] AS [Description], 
[Extent1].[Keywords] AS [Keywords], 
[Extent1].[Version] AS [Version], 
[Extent1].[CurrentPosition] AS [CurrentPosition], 
[Extent1].[Notes] AS [Notes]
FROM [Topic] AS [Extent1]
WHERE ([Extent1].[Id] = @p__linq__0) AND (@p__linq__0 IS NOT NULL) LIMIT 1


-- p__linq__0: '90f8f2c6-31cf-47a1-b8fb-61d5f4130d8f' (Type = AnsiStringFixedLength)

-- Executing at 9/17/2015 2:56:37 PM -05:00

-- Completed in 1 ms with result: SQLiteDataReader

編輯 :我已經了解到此問題是由於SQLite將GUID存儲為二進制Blob。 解決方法是,將數據類型從GUID更改為CHAR(36),現在可以使用LINQ到EF來檢索記錄。 我仍然想看看是否有人可以回答這個原始問題。

要解決此問題,請將其附加到連接字符串:

; binaryguid =假

如果為true-GUID列以二進制形式存儲;否則為false。 否則,GUID列將存儲為文本。 我認為,否則問題是由EF注入參數(類型= AnsiStringFixedLength)引起的。

當使用原始查詢(帶有執行讀取器的SQLiteCommand)時,使用guid參數的查詢仍可以與binaryguid一起正常工作。 避免使用EF,您可以自己提供。

command.Parameters.Add(new SQLiteParameter(DbType.Guid)
{
    ParameterName = "@id",
    Value = id
});

我將Id的數據類型更改為CHAR而不是GUID,以解決此問題。

我不知道正在為where子句x => x.Id.Equals(id)生成什么SQL? 我發現鏈接討論了如果ID恰好是可為空的uniqueidentifier的表達式分析器中的錯誤。

建議的解決方法是以這種方式使用Equals: x => Object.Equals(x.Id, id)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM