我可以避免使用SQL_VARIANT查询entity framework吗?
我首先使用实体框架6代码,我有一个简单的模型:
public class Task { [Key] public int aid {get;set;} [MaxLength(256)] public string Memo {get;set;} }
我得到一个模型:
int id = 3; from t in db.Tasks where t.aid == id select t;
要么
int id = 3; db.Tasks.Find(id);
肯定是快但不……
我查看由EF ORM生成的IntelliTrace中的SQL,如下所示:
DECLARE @p__linq__0 AS SQL_VARIANT; SET @p__linq__0 = 3; SET STATISTICS TIME ON SET STATISTICS IO ON SELECT [Limit1].[aid] AS [aid], [Limit1].[Memo] AS [Memo] FROM ( SELECT TOP (1) [Extent1].[aid] AS [aid], [Extent1].[Memo] AS [Memo] FROM [dbo].[Task] AS [Extent1] WHERE [Extent1].[aid] = @p__linq__0 ) AS [Limit1] SET STATISTICS TIME OFF SET STATISTICS IO OFF
我添加了SET STATISTICS并在SSMS中测试它。
表’任务’。 扫描计数1 ,…
它使用SQL_VARIANT ! 执行计划是扫描表而不是集群搜索!
EF为什么这样做?! 我可以避免吗?
(使用SQL Server 2012的LocalDB)
我发现了一个问题!
这是因为我在IntelliTrace中查看sql 。
IntelliTrace将隐藏所有变体并将它们显示为SQL_VARIANT 。
我通过SQL Server Profiler得到了实际的SQL,sql是:
exec sp_executesql N'SELECT [Limit1].[aid] AS [aid], [Limit1].[Memo] AS [Memo] FROM ( SELECT TOP (1) [Extent1].[aid] AS [aid], [Extent1].[Memo] AS [Memo] FROM [dbo].[Task] AS [Extent1] WHERE [Extent1].[aid] = @p__linq__0 ) AS [Limit1]',N'@p__linq__0 int',@p__linq__0=3
使用寻求查询数据是可以的。
上述就是C#学习教程:我可以避免使用SQL_VARIANT查询entity framework吗?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/942366.html