实体框架给出异常:“底层提供程序在Open上失败。”

时间:2011-02-14 00:06:26

标签: c# .net entity-framework

我有一个测试。发生的事情是,无论何时首先执行test1,test2都会失败并显示以下消息:

  

“System.Data.EntityException:System.Data.EntityException:       底层提供程序在打开时失败。无法打开数据库        登录请求“DBEntities”。登录失败。“。

并且无论何时首先执行test2,test1都会以相同的消息失败。

过去3天我一直在这。

[TestClass]
class MyTestClass 
{

    DBEntities db;

    [TestInitialize]
    public void Initializer()
    {
       db = new DBEntities(); 
    }

    [TestMethod]
    public void test1()
    {
       db.Books.Add(new Book{ ...});
       db.SaveChanges();

    }

    [TestMethod]
    public void test2()
    {
       db.Books.Add(new Book{ ...});
       db.SaveChanges();
    }


    [TestCleanup]
    public void Clean()
    {
       db.Dispose(); 
    }

}

以下是DBEntities类的摘录:

public class DBEntities : DbContext
{
    public DbSet<Books> TheBooks{get;set;}
    ...
}

运行探查器后,我注意到了这条消息:

  

“用户登录失败。原因:未能打开明确指定的数据库。”

经过大量lockAcquiredlockReleased陈述后。

4 个答案:

答案 0 :(得分:11)

问题可能是连接池?即使EF对象被处置,SQL提供程序是否会尝试保留测试之间的连接?在那种情况下,同一个用户是否有多个连接到同一个数据库的问题?

尝试在清理中明确关闭连接:

db.Database.Connection.Close();

答案 1 :(得分:4)

信息的重要部分是:

  

用户'domain1 \ user1'登录失败..

如果数据库拒绝您传递的登录信息,则EF无法正常工作。

答案 2 :(得分:1)

有时,您可以在运行框中键入“iisreset”,它将清除您描述的问题,特别是如果一切正常,并且突然间它停止工作。由于系统内存不足,可能会发生此错误。 (至少在我的情况下)

Start >> Run >> iisreset

答案 3 :(得分:0)

如果您正在运行IIS,请检查附加到Web应用程序的IIS池的标识