Tôi đã sử dụng EF 4.1 (Mã đầu tiên) trong một dự án MVC 3 một thời gian trở lại, và nó là tốt.Entity Framework 4.3.1 không tạo (/ mở) cơ sở dữ liệu [Threading Anomaly?]
Hôm nay tôi cố gắng sử dụng EF 4.3.1 (Mã Đầu tiên) trong một dự án WinForms và gặp phải một số voodoo thực: (Dự án ban đầu tôi đã làm việc trên là WinForms, tuy nhiên điều này cũng đúng cho gắn Mã ứng dụng Console.)
Khi cố gắng nhập một lớp đơn giản vào cơ sở dữ liệu, tôi nhận ngoại lệ sau: Không thể mở cơ sở dữ liệu "Kiểm tra" được yêu cầu bởi thông tin đăng nhập. Đăng nhập thất bại. Đăng nhập không thành công cho người dùng '[Tên máy tính] \ [Quản trị viên]'.
Tôi đã thử kiểm tra cấu hình SQL Server (2008 R2) nhưng người dùng của tôi không có tất cả các quyền trên máy chủ.
LƯU Ý: Các Cơ sở dữ liệu không không tồn tại khi tôi lần đầu tiên chạy ứng dụng.
Thậm chí mẫu mã sau đây không làm việc:
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;")
{ }
}
Tôi đã thử cài đặt lại EF 4.3.1 - vô ích. Khởi động lại SQL-Server cũng không có hiệu lực.
LƯU Ý: Tôi đã nhận thấy khá nhiều câu hỏi tương tự xung quanh, nhưng không ai đều giống như tôi và đã trả lời - đây của tôi hy vọng tôi sẽ có được may mắn ở đây :)
Để làm rõ: Người dùng bị từ chối truy cập là Chủ sở hữu (người quản trị cục bộ) của máy.
EDIT: tôi đã chạy một vài thí nghiệm và tôi đã tìm thấy một cái gì đó khá lạ:
Nếu tôi tạm dừng chương trình tại cửa sổ dòng đánh dấu "# 1" và kiểm tra giá trị của db. Database.Exists() qua cửa sổ Xem, Nó cho tôi biết: "Đánh giá chức năng yêu cầu tất cả chuỗi chạy" với nút wavey này có thể nhấp để chạy tất cả chuỗi.
Nếu tôi bấm vào nút chức năng để đánh giá False.
Bây giờ tôi có thể làm điều:
- Tiếp tục thực hiện: Trong trường hợp này tôi nhận được cùng một ngoại lệ chính xác.
- Thực thi db.Database.Tạo() từ cửa sổ Xem: Trong trường hợp này chương trình chạy thành công đến cuối và tôi thấy Cơ sở dữ liệu, Bảng và Hàng được tạo trong SQL Management Studio của tôi.
Có vẻ như một giải pháp đơn giản, đúng không? Sai rồi!
Tôi đã thử tiền tố truy cập dữ liệu bằng một cuộc gọi đến db.Database.CreateIfNotExists(); nhưng sau đó tôi nhận được cùng một ngoại lệ chính xác trên dòng đó.
db.Database.Initialize (true); không có tác dụng hoặc ...
LƯU Ý: Nếu bằng cách sử dụng các phương pháp trên tôi có thể tạo cơ sở dữ liệu, tôi có thể sử dụng nó đúng cách từ thời điểm đó trở đi, vì vậy đó là ít nhất một nửa an ủi: P Vấn đề là, tất nhiên, điều gì xảy ra khi tôi thêm DropCreateIfModelChanges hoặc DropCreateAlways Bộ phận đầu vào (vì tôi đang ở giữa quá trình phát triển tích cực của mô hình).
Cảm ơn.
[Tôi nghi ngờ đó là chi tiết của một vấn đề Entity Framework hơn SQL Server.]
Bạn có thể kết nối với cơ sở dữ liệu bằng thông tin đăng nhập mà không cần EF (ví dụ: từ Visual Studio hoặc Sql Server Management Studio) không? – Pawel
Vâng, bằng cách sử dụng Studio quản lý tôi có thể làm bất cứ điều gì tôi muốn trong Cơ sở dữ liệu, bao gồm tạo Cơ sở dữ liệu, Bảng, cập nhật hàng, v.v. –
Bạn có sử dụng bảo mật tích hợp không? – Pawel