簡體   English   中英

實體框架6根據列中的值將類映射到表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM