1

Entity Framework 4.1 を使用して ASP.Net MVC 3 Web アプリケーションを開発しています。最近、アプリケーションをテスト サーバーにアップロードしましたが、ELMAH から送信された次のようなエラー メールに気付きました。

System.Data.SqlClient.SqlException タイムアウトが発生しました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。

以下に私のコードの一部を示します。

コントローラ

public ActionResult VerifyEmail(int uid, string vid)
{
    var userList = _userService.VerifyEmail(uid,vid).ToList();
}

サービス

public IList<User> VerifyEmail(int uid, string emailvcode)
{
    return _uow.User.Get(u => u.userID == uid && u.emailVerificationCode == emailvcode).ToList();
}

作業単位

 public class UnitOfWork : IUnitOfWork, IDisposable
 {
        readonly LocumEntities _context = new LocumEntities();

        private GenericRepository<User> _user = null;

        public IGenericRepository<User> User
        {
            get
            {
                if (_user == null)
                {
                    _user = new GenericRepository<User>(_context);
                }
                return _user;
            }

        }

  }

汎用リポジトリ

public IList<TEntity> Get(Expression<Func<TEntity, bool>> filter = null,Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> orderBy = null,string includeProperties = "")
{
    IQueryable<TEntity> query = dbSet;

    if (filter != null)
    {
        query = query.Where(filter);
    }

    foreach (var includeProperty in includeProperties.Split
        (new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
    {
        query = query.Include(includeProperty);
    }

    if (orderBy != null)
    {
        return orderBy(query).ToList();
    }
    else
    {
        return query.ToList();
    }
}

サービス メソッド内の行が実行しようとしているときに、タイムアウトエラーが発生することがあります。

return _uow.User.Get(u => u.userID == uid && u.emailVerificationCode == emailvcode).ToList();

このエラーは毎回発生するわけではなく、たまにしか発生しませんが、このクエリがユーザーのリストまたは NULL リストを返すため、理由がわかりません。

なぜこれが起こっているのか、誰でも私のコードから見つけることができますか?

なぜこれが起こっているのかわからないので、フィードバックをいただければ幸いです。

ありがとう。

4

1 に答える 1

0

接続文字列のtimeoutプロパティを増やしてみてください。また、SQL Server Profilerを実行して、クエリに対して生成されているSQLの量を確認します。これは、クエリが大量のデータを返し、タイムアウトが発生する可能性があるためです。

于 2012-08-22T11:35:38.447 に答える