优化Entity Framework查找方法
Optimize the Entity Framework Find method
这是我通过 Id 获取操作的方法!
Operation operation = db.Operations.Find(id):;
我要优化这行代码!因为我不想在 id 没有值时发送请求。所以我写了下面一行。
Operation operation = id.HasValue? db.Operations.Find(id):null;
但我想知道我是否在重新发明轮子! E.F Find
方法参数为null时是否查询数据库?
使用 SQL 服务器分析器很容易测试。针对通用 IdentityContext:
int? id = 0;
var user = db.Users.Find(id);
Sql 探查器结果:
exec sp_executesql N'SELECT TOP (2)
[Extent1].[Id] AS [Id],
[Extent1].[Email] AS [Email],
[Extent1].[EmailConfirmed] AS [EmailConfirmed],
[Extent1].[PasswordHash] AS [PasswordHash],
[Extent1].[SecurityStamp] AS [SecurityStamp],
[Extent1].[PhoneNumber] AS [PhoneNumber],
[Extent1].[PhoneNumberConfirmed] AS [PhoneNumberConfirmed],
[Extent1].[TwoFactorEnabled] AS [TwoFactorEnabled],
[Extent1].[LockoutEndDateUtc] AS [LockoutEndDateUtc],
[Extent1].[LockoutEnabled] AS [LockoutEnabled],
[Extent1].[AccessFailedCount] AS [AccessFailedCount],
[Extent1].[UserName] AS [UserName]
FROM [dbo].[AspNetUsers] AS [Extent1]
WHERE [Extent1].[Id] = @p0',N'@p0 int',@p0=0
再次使用空值
int? id = null
var user = db.Users.Find(id);
SQL 探查器不记录查询。
看来您的 .HasValue
检查是不必要的。
这是我通过 Id 获取操作的方法!
Operation operation = db.Operations.Find(id):;
我要优化这行代码!因为我不想在 id 没有值时发送请求。所以我写了下面一行。
Operation operation = id.HasValue? db.Operations.Find(id):null;
但我想知道我是否在重新发明轮子! E.F Find
方法参数为null时是否查询数据库?
使用 SQL 服务器分析器很容易测试。针对通用 IdentityContext:
int? id = 0;
var user = db.Users.Find(id);
Sql 探查器结果:
exec sp_executesql N'SELECT TOP (2)
[Extent1].[Id] AS [Id],
[Extent1].[Email] AS [Email],
[Extent1].[EmailConfirmed] AS [EmailConfirmed],
[Extent1].[PasswordHash] AS [PasswordHash],
[Extent1].[SecurityStamp] AS [SecurityStamp],
[Extent1].[PhoneNumber] AS [PhoneNumber],
[Extent1].[PhoneNumberConfirmed] AS [PhoneNumberConfirmed],
[Extent1].[TwoFactorEnabled] AS [TwoFactorEnabled],
[Extent1].[LockoutEndDateUtc] AS [LockoutEndDateUtc],
[Extent1].[LockoutEnabled] AS [LockoutEnabled],
[Extent1].[AccessFailedCount] AS [AccessFailedCount],
[Extent1].[UserName] AS [UserName]
FROM [dbo].[AspNetUsers] AS [Extent1]
WHERE [Extent1].[Id] = @p0',N'@p0 int',@p0=0
再次使用空值
int? id = null
var user = db.Users.Find(id);
SQL 探查器不记录查询。
看来您的 .HasValue
检查是不必要的。