.

iT邦幫忙

1

CONVERT_IMPLICIT 問題解法(MSSQL與C#)

  • 分享至 

  • xImage
  •  

此處討論的是MS-SQL以及C# EF部分

當我有一張表T1如下

欄位 型別
A int
B nvarchar(10)
hash varchar(64)

那他C#通常對應的Entity class如下

public class T1
{ 
    public int A { get; set; } 
    public string B { get; set; }    
    public string Hash { get; set; } 
}

此時我們使用EF的基本查詢

string str = '12345';

var Query = Context.T1.Where(t=> t.hash == str).ToQueryString();

此時Query的值,也就是產出的語法如下

DECLARE @__str_0 nvarchar(4000) = '12345';
SELECT [t].[A], [t].[B], [t].[hash]
FROM [T1] AS [t]
WHERE [t].[hash] = @__str_0

發現問題了嗎?我們的hash是varchar,而EF預設將string轉為nvarchar,造成CONVERT_IMPLICIT,會有嚴重的效能問題。

解決辦法其實很容易,將class該欄位補上一條語法即可

 [Column(TypeName = "varchar(64)")]
 public string Hash { get; set; } 

.
圖片
  直播研討會

尚未有邦友留言

立即登入留言