优化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 检查是不必要的。