表格具有类似但不相关的数据记录
+------------+------------+-----------+-------------+----------------------+
| RecordType | Name | Surname | DateOfBirth | DateOfIncorporation |
+------------+------------+-----------+-------------+----------------------+
| Person | Luke | SkyWalker | 1/1/1017 | |
| Company | Jedi Order | | | 1/1/101 |
+------------+------------+-----------+-------------+----------------------+
我想使用两个类来处理这个问题,而不必总是查看RecordType(Person或Company)。
这是一个现有的表,并没有将表拆分为两个的选项(具有讽刺意味的是,这个表是使用代码第一个实体框架创建的,但现在无法修改表)
我有可能在实体框架中做到这一点吗?
也就是说,当我使用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;}
}
答案 0 :(得分:0)
是的,实体框架肯定是可行的。我发现的最佳指南是at this link。
修改强>
您当前正在使用Table-Per-Hierarchy,但是如果您遵循该指南,那么您可以通过这样的方式来执行此操作,以便能够有效地查询具有强类型的人员或公司。例如,
var allRecords = myDbContext.RecordsTable;
var personRecords = allRecords.OfType<Person>();
var companyRecords = allRecords.OfType<Company>();
使用此方法的一个好处是调用OfType()
不会强制执行,因此您可以在IQueryable<T>
上使用它而不会过早地获取记录。如果您的类共享所有或几乎所有相同的属性,这通常是一个很好的策略。否则,您将需要使用其他继承策略之一。