[英]Entity Framework 6 Mapping classes to a table based on a value in a column
一個表具有相似但不相關的數據記錄
+------------+------------+-----------+-------------+----------------------+
| RecordType | Name | Surname | DateOfBirth | DateOfIncorporation |
+------------+------------+-----------+-------------+----------------------+
| Person | Luke | SkyWalker | 1/1/1017 | |
| Company | Jedi Order | | | 1/1/101 |
+------------+------------+-----------+-------------+----------------------+
我想使用兩個類來處理此問題,而不必總是查看RecordType(人或公司)。
這是一個現有表,無法選擇將表一分為二(具有諷刺意味的是,該表是使用代碼優先實體框架創建的,但是現在無法修改該表)
有什么辦法可以在實體框架中做到這一點?
也就是說,當我使用Person class (context.Persons)
我只獲得RecordType為“ Person”的記錄;當我使用Company class (context.Companies)
我僅獲得RecordType為“ Comapany”的記錄-
class Person
{
string RecordType {get;set;} //This will only have "Person"
string Name {get;set;}
string Surname {get;set;}
DateTime DateOfBirth {get;set;}
}
class Company
{
string RecordType {get;set;} //This will only have Company
string Name {get;set;}
DateTime DateOfIncorporation {get;set;}
}
是的,使用實體框架絕對可以實現。 在此鏈接上找到了關於此問題的最佳指南。
編輯
您當前正在使用逐層表格,但是如果您遵循該指南,則可以按照能夠有效查詢具有強類型的個人或公司的方式進行操作。 例如,
var allRecords = myDbContext.RecordsTable;
var personRecords = allRecords.OfType<Person>();
var companyRecords = allRecords.OfType<Company>();
使用此方法的一個好處是調用OfType()
不會強制執行,因此您可以在IQueryable<T>
上使用它,而不會太早獲取記錄。 如果您的課程共享所有或幾乎所有相同的屬性,這通常是一個不錯的策略。 否則,您將要使用其他繼承策略之一。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.