簡體   English   中英

實體框架如何在生成的 SQL (SQLServer 2005) Nvarchar vs Varchar 中指定參數類型

[英]Entity Framework How to specify paramter type in generated SQL (SQLServer 2005) Nvarchar vs Varchar

在實體框架中,我有一個從數據庫生成的實體“客戶端”。 有一個名為“帳戶”的屬性,它在存儲模型中定義為:

 <Property Name="Account" Type="char" Nullable="false"  MaxLength="6" /> 

在概念模型中為:

<Property Name="Account" Type="String" Nullable="false" />

當使用 Account 變量生成 select 語句時,即

where m.Account == myAccount...

實體框架使用 NVarchar(6) 類型的參數生成參數化查詢。 問題是表中的列是char(6)的數據類型。 執行此操作時,由於數據類型差異,性能會受到很大影響。 帳戶是表上的索引,我相信索引掃描已完成,而不是使用索引。

任何人都知道如何強制 EF 不使用 Unicode 作為參數並使用 Varchar(6) 代替?

我想我找到了自己問題的答案。 這里http://blogs.msdn.com/b/adonet/archive/2010/05/10/improvements-to-generated-sql-in-net-4-0.aspx

它討論了對 EF 4.0 中生成的 sql 的改進。 具體說

提供對非 Unicode 列進行高效查詢的機制

在 .NET 3.5 中,每當在 LINQ to Entities 查詢中使用常量或參數時,我們都將其視為 Unicode。 因此,當將常量與存儲在 SQL Server 上的非 unicode 列中的屬性進行比較時,如果該列上有索引,則不會使用它。

為了解決這個問題,我們現在在 LINQ to Entities 查詢中使用非 unicode 常量和參數與非 unicode 列進行比較時生成這些常量和參數。

我想我需要升級。

該字段的屬性窗口有 3 個屬性可以滿足您的要求,即固定長度、最大長度和 Unicode,當您在設計器中選擇適當的字段時,它們位於屬性窗口的 F​​acets 組中。

我目前正在研究 EF4,但不確定這些是否存在於 EF 的先前版本中。

它應該最終在 XML 中看起來像這樣。

<Property Name="Account" Type="String" MaxLength="6" Unicode="false" FixedLength="true" Nullable="false" />

暫無
暫無

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

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