我正在使用 Entity Framework 4.3.1,代码优先,并且正在 SQL Profiler 中查看正在生成的查询。这是一个例子:
如您所见 - 它正在指定参数,nvarchar(max)
但在我的配置中我指定了一个MaxLength
值。因此,我希望参数将被传递,nvarchar(n)
因为它不这样做,我们发现查询运行缓慢,这个简单的更改会加快它们的速度。
有谁知道我们如何说服实体框架生成正确的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)
,这就是让它变慢的原因。