Entity Framework 4.3.1 не удалось создать (/open )базу данных [Аномалия многопоточности?]

Я использовал EF 4.1(Code First)в проекте MVC 3 некоторое время назад, и это было хорошо.

Сегодня я попытался использовать EF 4.3.1(Code First)в проекте WinForms и столкнулся с настоящим колдовством:(Первоначальный проект, над которым я работал, был WinForms, однако то же самое верно и для прикреплен Код консольного приложения.)

При попытке ввести простой класс в базу данных я получаю следующее исключение: Не удается открыть базу данных «Тест», запрошенную при входе в систему. Вход не выполнен. Ошибка входа для пользователя «[ComputerName]\[Administrator]».

Я пытался проверить конфигурации SQL Server (2008 R2 ), но мой пользователь имеет все разрешения на сервере.

ПРИМЕЧАНИЕ.:База данных не существует при первом запуске приложения.

Даже следующий пример кода не работает.:

class Program
{
    public static void Main()
    {
        var person = new Person { Name = "Nathan" };
        using (var db = new MyContext())
        { //#1
            db.Persons.Add(person);
            db.SaveChanges();
        }
        Console.Write("Person saved !");
        Console.ReadLine();
    }
}

public class Person
{
    public int PersonId { get; set; }
    public string Name { get; set; }
}

public class MyContext : DbContext
{
    public DbSet<Person> Persons { get; set; }
    public MyContext()
        : base("Data Source=localhost;Database=Test;Integrated Security=True;")
    { }
}

Я пытался повторно -установить EF 4.3.1 -, но безрезультатно. Перезапуск сервера SQL -также не дал результата.

ПРИМЕЧАНИЕ:Я заметил довольно много похожих вопросов, но ни один из них не совпадает с моим ответом и -вот я надеюсь, что мне здесь повезет:)

Чтобы уточнить:Пользователь, которому отказано в доступе, является владельцем (локальным администратором )машины.

РЕДАКТИРОВАТЬ:Я провел несколько экспериментов и обнаружил кое-что довольно странное.:

Если я приостановлю программу на строке с пометкой "#1" и проверю значение db.Database.Exists()через окно Watch . Он сообщает мне:«Оценка функции требует запуска всех потоков» с помощью этой маленькой волнистой кнопки, которую я могу щелкните, чтобы запустить все потоки.Image depicting the above paragraph

Если я нажму на эту кнопку, функция оценивается какFalse.

Теперь я могу сделать 2 вещи:

  1. Продолжить выполнение:В этом случае я получаю точно такое же исключение.
  2. Выполнить db.Database.Create ()из окна Watch:В этом случае программа выполняется успешно до конца, и я вижу базу данных, таблицу и строку, созданные в моей SQL Management Studio .

Кажется, простое решение, верно? Неправильный!

Я пробовал префикс доступа к данным вызовом db.Database.CreateIfNotExists (); , но затем я получаю точно такое же исключение в этой строке.

db.Database.Initialize (true ); также не имеет никакого эффекта...

ПРИМЕЧАНИЕ:Если я создам базу данных, используя описанный выше метод, я смогу использовать ее должным образом с этого момента, так что это, по крайней мере, половина утешения. :P проблема, конечно,что происходит, когда я добавляю DropCreateIfModelChanges или DropCreateAlways Инициализатор (, так как я нахожусь в процессе активной разработки модели ).

Спасибо.

[Я подозреваю, что это скорее проблема Entity Framework, чем SQL Server.]

7
задан Nathan Dortman 3 May 2012 в 18:44
поделиться