Entity Framework, выдавая исключение: «Основной поставщик не удалось открыть». - PullRequest
10 голосов
/ 14 февраля 2011

У меня есть тест.При каждом первом выполнении 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;}
    ...
}

После запуска профилировщика я заметил это сообщение:

"Войтисбой для пользователя. Причина: не удалось открыть явно указанную базу данных. "

после множества операторов lockAcquired и lockReleased.

Ответы [ 4 ]

11 голосов
/ 15 февраля 2011

Может ли быть проблема с пулами соединений?Будет ли поставщик SQL пытаться сохранить связь между тестами, даже если объект EF расположен?В этом случае возникнет ли проблема с несколькими подключениями к одной и той же БД одним и тем же пользователем?

Попробуйте явно закрыть соединение при очистке:

db.Database.Connection.Close();
4 голосов
/ 14 февраля 2011

Важная часть сообщения:

Ошибка входа для пользователя 'domain1 \ user1' ..

Если БД отклоняет данные входа, которые вы передаете,тогда EF не может работать.

1 голос
/ 15 февраля 2012

Иногда вы можете ввести «iisreset» в поле «Выполнить», чтобы устранить описанную проблему, особенно если все работало нормально и внезапно перестало работать.Эта ошибка может произойти из-за нехватки памяти в вашей системе.(По крайней мере, в моем случае)

image> Run >> iisreset">

0 голосов
/ 11 апреля 2013

Если вы работаете через IIS, проверьте идентификацию пула IIS, подключенного к веб-приложению

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...