在.net中人为地创建连接超时错误

时间:2014-01-15 08:12:49

标签: c# asp.net-mvc-3 entity-framework ado.net adomd.net

我正在使用asp.net MVC框架并使用EntityFramework连接到数据库。有时连接到数据库时出现超时错误。这些错误非常罕见。

System.Data.Entity.Infrastructure.DbUpdateException:
 An error occurred while updating the entries. See the inner exception for details. ---> System.Data.UpdateException: An error occurred while updating the entries. 
See the inner exception for details. ---> System.Data.SqlClient.SqlException:
Timeout expired. The timeout period elapsed prior to 
completion of the operation or the server is not responding.

var myList = new List<MyConnection>();
using (var db = new MyDb())
            {
                var activeConns = db.Connections
                                    .Where(c => c.Key == tKey)
                                    .Where(c => c.IsActive)
                                    .ToList();
                if (activeConns.Count > 0)
                {
                    //Some custom logic
         myList.add(conn);
                }

            return myList;
        }

我没有设置任何连接超时时间。使用Entity Framework时是否有最佳做法?

如何人为地产生这种缺陷,以便测试我们的软件?

2 个答案:

答案 0 :(得分:0)

我们在代码库中处理此类事情的方式是使用mock objects - 允许我们将实际实现(例如,数据库)替换为仅用于测试的虚假实现。 / p>

从客户端的角度来看,假的行为相同,但是我们可以更好地控制测试错误等行为的行为(例如,在第5次请求时抛出超时错误)。

Mocking Entity Framework Context是另一个SO问题,详细介绍了如何进行设置,特别是针对EntityFramework。

答案 1 :(得分:0)

您可能需要使用Reflection来抛出SQL Timeout Exception。 查看这篇文章寻求帮助: http://blog.developers.ba/post/2009/03/08/SqlException-class-doesnt-have-public-constructor.aspx