Tôi đang làm việc với cơ sở dữ liệu SQL Server với hơn 1000 bảng, vài trăm khung nhìn khác và hàng nghìn thủ tục được lưu trữ. Chúng tôi đang tìm cách bắt đầu sử dụng Entity Framework cho các dự án mới hơn của chúng tôi và chúng tôi đang thực hiện chiến lược của mình để thực hiện điều đó. Điều tôi gác máy là cách tốt nhất để chia các bảng thành các mô hình khác nhau (EDMX hoặc DbContext nếu chúng ta đi mã trước). Tôi có thể nghĩ ra một vài chiến lược ngay lập tức:
- Phân chia theo lược đồ
Chúng ta có các bảng được phân chia có lẽ là một tá lược đồ. Chúng ta có thể làm một mô hình cho mỗi lược đồ. Tuy nhiên, điều này không hoàn hảo vì dbo vẫn rất lớn, với hơn 500 bảng / lượt xem. Một vấn đề khác là một số đơn vị công việc nhất định sẽ phải thực hiện các giao dịch trải rộng trên nhiều mô hình, điều này làm tăng thêm sự phức tạp, mặc dù tôi cho rằng EF thực hiện điều này khá đơn giản. - Chia theo ý định
Thay vì lo lắng về lược đồ, hãy phân chia các mô hình theo ý định. Vì vậy, chúng tôi sẽ có các mô hình khác nhau cho từng ứng dụng, dự án hoặc mô-đun hoặc màn hình, tùy thuộc vào mức độ chi tiết mà chúng tôi muốn nhận. Vấn đề tôi thấy với điều này là có một số bảng nhất định chắc chắn phải được sử dụng trong mọi trường hợp, chẳng hạn như Người dùng hoặc AuditHistory. Chúng ta có thêm chúng vào mỗi mô hình (vi phạm DRY tôi nghĩ) hay là những mô hình trong một mô hình riêng biệt được sử dụng bởi mọi dự án? - Đừng phân chia tất cả - một mô hình khổng lồ
Điều này rõ ràng đơn giản từ góc độ phát triển nhưng từ nghiên cứu và trực giác của tôi, dường như nó có thể thực hiện khủng khiếp, cả về thời gian thiết kế, thời gian biên dịch và có thể là thời gian chạy.
Thực tiễn tốt nhất để sử dụng EF đối với cơ sở dữ liệu lớn như vậy là gì? Cụ thể những chiến lược nào mà mọi người sử dụng trong việc thiết kế các mô hình chống lại khối lượng đối tượng DB này? Có những lựa chọn mà tôi không nghĩ về công việc đó tốt hơn những gì tôi có ở trên không?
Ngoài ra, đây có phải là vấn đề trong các ORM khác như NHibernate không? Nếu vậy họ có đưa ra giải pháp nào tốt hơn EF không?