Tôi đang làm việc trên một dự án mà có thể kết thúc với nhiều phiên bản UI/biến thể, nhưng cho đến nay tôi đã có hai tiểu dự án trong giao diện Web có chứa Web của tôi với ASP.NET MVC . Dự án dịch vụ là nơi tôi có bối cảnh và mô hình cơ sở dữ liệu được xác định.Nơi để đặt Database.SetInitializer
Mục tiêu của tôi là có tối thiểu hoặc có thể không có tham chiếu đến mã cụ thể EF trong dự án Web của tôi. Tôi muốn nó được độc lập vì vậy khi tôi chuyển đổi các dll với backend dịch vụ (từ hãy nói SQL để XML hoặc MySQL) Tôi không nên thực hiện nhiều sửa đổi trong dự án MVC của tôi.
Đây là cách nó trông:
Câu hỏi của tôi là: - cho đến nay tôi đã không tìm thấy ví dụ của việc sử dụng Database.SetInitializer ở vị trí khác ngoài Global.asax. Tôi muốn tạo lại cơ sở dữ liệu nếu mô hình đã thay đổi trong lớp DatabaseContextProvider giống như nhà máy của tôi hoặc trong lớp dịch vụ để lấy ra dữ liệu từ ngữ cảnh và cung cấp cho UI với DTO. Có bất kỳ khuyết điểm nào của địa điểm đó không? - Tôi muốn có connectionString của bối cảnh để có thể cấu hình được với tệp Thuộc tính/Cài đặt.settings - điều đó có hợp lý không?
Một vấn đề tiềm ẩn khi thực hiện việc này là nó có thể được gọi mỗi khi lớp myDbContext được xây dựng, điều này rất có thể là mỗi khi bạn sử dụng cơ sở dữ liệu. Tôi sẽ tưởng tượng đây là một hoạt động hợp lý tốn kém và bạn không muốn điều này xảy ra. Sử dụng Global.asax Application_Start hoặc một Trình xây dựng tĩnh trong lớp DataContext đảm bảo rằng mã chỉ được gọi một lần, khi ứng dụng được khởi động. – Holf
Tôi đồng ý với Holf, mã nên được trên application_start –