Tôi đã viết lại một lúc sau, nhưng tôi đã đến để xem lại nó gần đây và bây giờ không nghĩ rằng đó là thiết kế tốt.
Thiết kế dành cho một loại lớp cơ sở dữ liệu mô đun sử dụng Entity Framework 4. Có một đối tượng cơ sở dữ liệu duy nhất tải bối cảnh khung thực thể (lười biếng) từ các thư viện bên ngoài trong một vị trí xác định và các trường hợp của bối cảnh được tải được lưu trữ trong bảng băm tên của họ (EG "ContentMgmtContext").
Tất cả các liên hệ với cơ sở dữ liệu trong hệ thống này là thông qua các thủ tục được lưu trữ. Để thực hiện cuộc gọi đến cơ sở dữ liệu, chữ ký phương thức truy vấn trông như thế này:
List<TReturn> Query<TReturn>(string Context,
string Procedure,
TransactionScope Scope,
List<ObjectParameter> QueryParameters)
Mô-đun này là một cái gì đó tôi thích. Tuy nhiên, có một nhược điểm đáng kể đối với phương pháp này: when using the database layer, the code using it has to have a reference to the library in which the context is stored, in order to access the types returned by the stored procedures through Entity Framework.
Trong mô hình, các đối tượng từ lớp cơ sở dữ liệu được dịch sang các đối tượng mới mà khung nhìn và trình điều khiển sử dụng.
Tôi nghĩ rằng đây là thiết kế xấu, nhưng làm thế nào tôi có thể cải thiện nó? Tôi đã xem xét việc thêm một giao diện trống như IStoredProecedureObject
cung cấp cho mọi loại dữ liệu được trả về bởi một thủ tục được lưu trữ thành một loại cơ sở chung, tuy nhiên điều này dường như bị xóa bởi Entity Framework. Mỗi khi .edmx
tệp được biên dịch lại, mã được tạo lại và bất kỳ bổ sung nào bị xóa. Có cách nào để ngăn chặn điều này xảy ra?
Làm thế nào tôi có thể cải thiện thiết kế này? Điều gì (khác) là sai với nó? Hay tôi đang đi đúng hướng?