Tôi đã tìm thấy một số thông tin liên quan đến điều này nhưng không đủ để tôi hiểu những gì thực hành tốt nhất cho là cho kịch bản này. Tôi có thiết lập TPH điển hình của bạn với một lớp cơ sở trừu tượng "Công ty". Tôi có một số trẻ em "Công ty nhỏ", "Công ty lớn" vv kế thừa từ Công ty. Trong thực tế tôi thực sự có phân loại thực tế khác nhau cho các công ty nhưng tôi đang cố gắng giữ nó đơn giản trong ví dụ này. Trong cơ sở dữ liệu theo TPH, tôi có một bảng Công ty với cột FirmTypeId (int) phân biệt giữa tất cả các loại này. Mọi thứ đều hoạt động tốt, ngoại trừ tôi có yêu cầu cho phép người dùng thay đổi một loại công ty thành một công ty khác. Ví dụ: người dùng có thể đã phạm sai lầm khi thêm công ty và muốn thay đổi nó từ Big Firm thành Small Firm. Vì khung thực thể không cho phép hiển thị cột cơ sở dữ liệu phân biệt đối xử như là một thuộc tính, tôi không tin rằng có một cách để thay đổi một kiểu này sang kiểu khác thông qua EF. Hãy sửa tôi nếu tôi sai. Cách tôi nhìn thấy tôi có hai tùy chọn:Entity Framework 4 TPH thừa kế, làm thế nào để thay đổi một loại khác?
- Không sử dụng TPH. Đơn giản chỉ cần có một Entity Firm và quay lại sử dụng .Where (FirmTypeId == something) để phân biệt giữa các loại.
- Thực hiện SQL trực tiếp bằng cách sử dụng context.ExecuteStoreCommand để cập nhật cột FirmTypeId của cơ sở dữ liệu.
Tôi đã nhìn thấy một bài đăng mà mọi người đề xuất rằng Một trong các nguyên lý của OOP là các trường hợp không thể thay đổi loại của chúng. Mặc dù điều đó có ý nghĩa hoàn hảo với tôi, tôi dường như không thể kết nối các dấu chấm. Nếu chúng ta tuân theo quy tắc này, thì thời gian duy nhất để sử dụng bất kỳ loại thừa kế nào (TPH/TPT) là khi người ta chắc chắn rằng một loại sẽ không bao giờ được chuyển đổi thành một loại khác. Vì vậy, một công ty nhỏ sẽ không bao giờ trở thành một công ty lớn. Tôi thấy đề xuất rằng thành phần nên được sử dụng thay thế. Mặc dù nó không có ý nghĩa với tôi (có nghĩa là tôi không thấy làm thế nào một công ty có một công ty lớn, với tôi một công ty lớn là một công ty), tôi có thể xem cách thành phần có thể được mô hình hóa trong EF nếu dữ liệu được trong nhiều bảng. Tuy nhiên trong một tình huống mà tôi có một bảng duy nhất trong cơ sở dữ liệu có vẻ như đó là TPH hoặc những gì tôi đã mô tả trong # 1 và # 2 ở trên.
Đó "ai đó" có thể là tôi. Trong OO dựa trên lớp, các đối tượng không thể thay đổi kiểu. Không bao giờ. C# không cho phép điều này. EF chắc chắn không thêm tính năng này vào C#. Điều duy nhất khác với EF là tuổi thọ của vật thể dài hơn - hiệu quả, mãi mãi. –
Craig, nó có thể là bạn. Tôi vừa chỉnh sửa bài đăng để bao gồm thêm một chút thông tin về vấn đề này. Nếu bạn không nhớ xem lại đoạn cuối trong bài viết của tôi và làm sáng tỏ một số cách tiếp cận đúng. – e36M3
Sự khác biệt giữa "Công ty nhỏ" và "Công ty lớn" là gì? BTW Tôi không nhận được thông báo trả lời của bạn trừ khi bạn đặt @Craig vào họ. –