Giả sử, tôi có 2 lớp trong mô hình: Người dùng (ánh xạ tới bảng USERS) và PrivilegedUser (kế thừa người dùng, thông tin bổ sung được lưu trữ trong bảng PRIVILEGEDUSERS).Entity Framework: Thừa kế, thay đổi kiểu đối tượng
Bây giờ, tôi có một hàng trong USERS (và trường hợp Người dùng) và cần phải chuyển đổi người dùng đó thành PrivilegedUser (tức là tạo bản ghi trong PRIVILEGEDUSERS có cùng Id). Có cách nào để thực hiện việc này mà không cần Xóa/Chèn không?
Vấn đề là bạn không có đại diện PRIVILEGEDUSERS trong mô hình, vì vậy bạn không thể tạo chỉ một phần của PrivilegedUser.
Đó chỉ là một ví dụ. PrivilegedUser có thể có một số giảm giá hoặc quản lý cá nhân hoặc bất cứ điều gì ngoài để tài sản người dùng bình thường. Đồng thời, có các bảng khác cần tham khảo người dùng bất kể loại người dùng cụ thể. Tôi đã triển khai nó bằng chế độ kế thừa Table-per-Type. Ở cấp độ cơ sở dữ liệu, nó rất đơn giản để chuyển đổi người dùng từ kiểu này sang kiểu khác (bạn chỉ cần chèn hoặc xóa bản ghi từ bảng mở rộng). Nhưng trong EF bạn chỉ có UserSet lưu trữ cả đối tượng User và PrivilegedUser. Đó là lý do tại sao tôi yêu cầu có thể thay thế đối tượng người dùng hiện có với PrivilegedUser giữ Id hiện tại và không xóa bản ghi khỏi bảng USERS.
Điều này là chính xác. Một thể hiện nên/không bao giờ có thể thay đổi kiểu. Vậy điều gì sẽ xảy ra khi người dùng trở thành đặc quyền hoặc không có đặc quyền? –
@Craig, có tin gì không? Tôi chạy vào cùng một câu hỏi. – Shimmy
@Shimmy, "tin tức?" Tin tức gì? Nếu bạn nghĩ rằng đối tượng của bạn cần phải thay đổi loại, sau đó bạn có thể lạm dụng thừa kế. @ DanDan của câu trả lời vẫn là một ý tưởng tốt hơn. –