Я использовал 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 . Он сообщает мне:«Оценка функции требует запуска всех потоков» с помощью этой маленькой волнистой кнопки, которую я могу щелкните, чтобы запустить все потоки.
Если я нажму на эту кнопку, функция оценивается какFalse.
Теперь я могу сделать 2 вещи:
Кажется, простое решение, верно? Неправильный!
Я пробовал префикс доступа к данным вызовом db.Database.CreateIfNotExists (); , но затем я получаю точно такое же исключение в этой строке.
db.Database.Initialize (true ); также не имеет никакого эффекта...
ПРИМЕЧАНИЕ:Если я создам базу данных, используя описанный выше метод, я смогу использовать ее должным образом с этого момента, так что это, по крайней мере, половина утешения. :P проблема, конечно,что происходит, когда я добавляю DropCreateIfModelChanges или DropCreateAlways Инициализатор (, так как я нахожусь в процессе активной разработки модели ).
Спасибо.
[Я подозреваю, что это скорее проблема Entity Framework, чем SQL Server.]