Vì vậy, nó chỉ ra rằng tôi là người cuối cùng để khám phá sàn cơ bản tồn tại trong khuôn khổ thực thể của Microsoft khi thực hiện TPT (Bảng Per Type) thừa kế. Đã xây dựng một mẫu thử nghiệm với 3 lớp phụ, bảng/lớp cơ sở gồm 20 cột và bảng con gồm ~ 10 cột, mọi thứ hoạt động tốt và tôi tiếp tục làm việc trên phần còn lại của ứng dụng đã chứng minh khái niệm. Bây giờ thời gian đã đến để thêm 20 loại phụ khác và OMG, tôi vừa mới bắt đầu tìm kiếm SQL được tạo ra trên một lựa chọn đơn giản, mặc dù tôi chỉ quan tâm đến việc truy cập vào các trường trên lớp cơ sở.Biểu mẫu thực thể Bảng Per Type Hiệu suất
This page có mô tả tuyệt vời về sự cố.
Có ai đi vào sản xuất sử dụng TPT và EF, đang có cách giải quyết bất kỳ mà sẽ có nghĩa là tôi sẽ không phải: a) Chuyển đổi schema để TPH (mà đi ngược lại tất cả những gì tôi cố gắng để đạt được với tôi Thiết kế DB - urrrgghh!)? b) viết lại bằng ORM khác?
Cách tôi xem, tôi có thể thêm tham chiếu vào Thủ tục được lưu trữ từ trong EF (có thể sử dụng EFExtensions) có TSQL chỉ chọn các trường tôi cần, thậm chí sử dụng mã được tạo bởi EF cho con quái vật UNION/JOIN bên trong SP sẽ ngăn chặn SQL được tạo ra mỗi khi một cuộc gọi được thực hiện - không phải cái gì tôi sẽ có ý định làm, nhưng bạn có được ý tưởng.
Kẻ giết người tôi đã tìm thấy, là khi tôi chọn danh sách các thực thể được liên kết với bảng cơ sở (nhưng thực thể tôi chọn không phải là bảng phân lớp) và tôi muốn lọc theo pk của bảng Base, và tôi làm .Include("BaseClassTableName")
để cho phép tôi lọc bằng cách sử dụng x=>x.BaseClass.PK == 1
và truy cập các thuộc tính khác, nó cũng thực hiện thế hệ SQL mẹ ở đây.
Tôi không thể sử dụng EF4 vì tôi bị giới hạn trong thời gian chạy .net 2.0 với cài đặt 3.5 SP1.
Có ai có bất kỳ trải nghiệm nào để thoát khỏi mớ hỗn độn này không?
tôi không thể nói cho EF4 trước, nhưng trong blog của tuyên bố "Bảng-Per-Type thừa kế là 100% không sử dụng được. " là một chút vô lý - ít nhất là trong EF4. Nó có một số vấn đề hiệu suất có - nhưng nếu bạn có 20 loại phụ, bạn có chắc là bạn đã thực hiện chuẩn hóa cơ sở dữ liệu chính xác không? Có thể 20 loại phụ đó không được chia thành các thực thể cha mẹ riêng biệt không? – RPM1984
Dường như các ORM khác xử lý thiết kế TPT mà không có vấn đề gì. Liên quan đến blog, nó nói rằng khi thực hiện một cơ sở dữ liệu/lớp thiết kế có một số lượng lớn các loại, thời gian cần để tạo ra SQL trước khi thực thi lớn hơn vài phút, tôi tin rằng đó là đủ để sao lưu câu lệnh nó không thể sử dụng được trong môi trường sản xuất. Hãy suy nghĩ về một danh mục xe, với thông tin chung được lưu trữ về mọi xe (bảng/lớp cơ sở) và thông tin duy nhất được lưu trữ về máy bay/xe lửa/điện thoại di động (bảng phụ/lớp) - Tôi không giao dịch với xe, nhưng bạn lấy ý tưởng – Tr1stan
... và có> 20 loại xe khác nhau đang được lưu trữ, trước khi bạn bắt đầu đi vào các loại xe phụ và tất cả các giá trị tra cứu. – Tr1stan