私は Entity Framework 4.3.1 を使用しており、最初にコードを作成し、生成されているクエリを SQL プロファイラーで調べています。例を次に示します。
ご覧のとおり、引数をnvarchar(max)
次のように指定していますが、私の構成ではMaxLength
値を指定しています。したがって、パラメーターは次のように渡されると予想されますnvarchar(n)
。これを行わないため、クエリの実行が遅く、この単純な変更でクエリが高速化されることがわかりました。
Entity Framework に正しいnvarchar
長さを生成させる方法を知っている人はいますか?
これが私のエンティティと構成コードです:
実在物
public class StorageTransportOrderItem
{
public string StorageTransportOrderItemNumber { get; set; }
public string StorageNumber { get; set; }
[...]
}
構成
ToTable("StorageTransportOrderItem");
Property(p => p.StorageTransportOrderNumber)
.HasMaxLength(10);
Property(d => d.StorageTransportOrderItemNumber)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)
.HasMaxLength(4);
HasKey(d => new
{
d.StorageTransportOrderItemNumber,
d.StorageNumber,
d.StorageTransportOrderNumber
});
クエリの例
FROM [dbo].[StorageTransportOrder] AS [Extent1]
WHERE ([Extent1].[StorageNumber] = @p__linq__0) AND ([Extent1]
[StorageTransportOrderNumber] = @p__linq__1)
) AS [Limit1]',N'@p__linq__0 nvarchar(max) ,@p__linq__1 nvarchar(max)
',@p__linq__0=N'200',@p__linq__1=N'0001374850'
に注意してくださいnvarchar(max)
。これが遅い原因です。