2

我有一个 .NET 项目,其中包含以下内容:

  1. WCF 网络服务
  2. 实体框架数据层

下面描述的最终问题是用户表。User表的schema如下:

CREATE TABLE [dbo].[User](
    [Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
    [FirstName] [varchar](50) NOT NULL,
    [LastName] [varchar](50) NOT NULL,
    [Email] [varchar](50) NOT NULL,
    [Username] [varchar](50) NOT NULL,
    [Password] [varchar](250) NOT NULL,
    [AuthenticationKey] [uniqueidentifier] NULL,
    [Active] [bit] NOT NULL DEFAULT (1),
    [Admin] [bit] NOT NULL DEFAULT (0),
    [AutoSubmit] [bit] NOT NULL DEFAULT(0))

CREATE UNIQUE NONCLUSTERED INDEX [IX_User] ON [dbo].[User] 
(
        [Username] ASC
)

如果我对包含 3 条记录的 User 表运行查询,它会在不到一秒的时间内执行。

我正在一个名为 User.Validate() 的方法中针对实体框架运行以下查询。

database.User.Where(user => user.Username == userName && user.Active).SingleOrDefault()

从单元测试调用时,上面的代码执行正常。但是,当从 WCF Web 服务调用该方法时,会发生以下异常:

System.ServiceModel.FaultException:System.Web.Services.Protocols.SoapException:服务器无法处理请求。---> System.Data.EntityCommandExecutionException:执行命令定义时出错。有关详细信息,请参阅内部异常。---> System.Data.SqlClient.SqlException:超时已过期。在操作完成之前超时时间已过或服务器没有响应。---> System.ComponentModel.Win32Exception:等待操作超时

在实体框架的覆盖下,以下查询是查询超时时运行的内容。如果我运行查询,它会在不到一秒的时间内执行。什么可能导致此超时?

exec sp_executesql N'SELECT TOP (2) 
[Extent1].[Id] AS [Id], 
[Extent1].[FirstName] AS [FirstName], 
[Extent1].[LastName] AS [LastName], 
[Extent1].[Email] AS [Email], 
[Extent1].[Username] AS [Username], 
[Extent1].[Password] AS [Password], 
[Extent1].[AuthenticationKey] AS [AuthenticationKey], 
[Extent1].[Active] AS [Active], 
[Extent1].[Admin] AS [Admin], 
[Extent1].[AutoSubmit] AS [AutoSubmit]
FROM [dbo].[User] AS [Extent1]
WHERE [Extent1].[Username] = @p__linq__0',N'@p__linq__0 varchar(8000)',@p__linq__0='test1'
4

0 回答 0