如何从 TPH Table 获取主列表
How to get a Master List from a TPH Table
我正在为我的代码优先模型使用 Table-Per-Hierarchy (TPH) 结构。
我有一个基本模型客户:
public abstract class Customer : IEntity
{
[Key]
public int Id { get; set; }
protected BusinessType CustomerType { get; set; }
}
我有几个模型继承客户:
public class CommercialCustomer : Customer, IAggregateRoot
{
public CommercialCustomer()
{
CustomerType = BusinessType.Commercial;
}
[DisplayName("Customer Name")]
public string BusinessName { get; set; }
}
public class ResidentialCustomer : Customer, IAggregateRoot
{
public ResidentialCustomer()
{
CustomerType = BusinessType.Residential;
}
[DisplayName("Customer Name")]
public string CustomerName { get; set; }
}
public class EducationalCustomer : Customer, IAggregateRoot
{
public EducationalCustomer()
{
CustomerType = BusinessType.Educational;
}
public string SchoolName { get; set; }
public string Department { get; set; }
}
等等。
要获取我使用的住宅客户列表:
IList<ResidentialCustomer> customers = _context.ResidentialCustomers.ToList();
我需要帮助的是如何获得作为超集的主客户列表?正如预期的那样,在 Customer 上调用 .ToList() 扩展方法只是 returns Id 属性。使用 SqlDataAdapter 我可以 return a table…
const string cmdString =
"SELECT Id, CONCAT(SchoolName + ', ' + Department, CustomerName, BusinessName) AS Name FROM Customers ORDER BY Name";
string connectionString = ConfigurationManager.ConnectionStrings["TestContext"].ConnectionString;
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(cmdString, connection);
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataTable table = new DataTable();
adapter.Fill(table);
我真正需要的只是来自数据库的客户 Table 的原始内容来填充组合框。有没有更简洁的方法只使用 EntityFramework?
如果您首先在代码中使用 TPH,那么按照规定的方法是整个层次结构只有一个 DbSet,其中元素的类型是您的基本类型。然后使用 .Map
为基础实体上的派生类型设置条件。查询派生类型时,对一个实体集使用 .OfType<T>()
方法以按派生类型进行过滤。下面的简介显示了一个例子:
我正在为我的代码优先模型使用 Table-Per-Hierarchy (TPH) 结构。 我有一个基本模型客户:
public abstract class Customer : IEntity
{
[Key]
public int Id { get; set; }
protected BusinessType CustomerType { get; set; }
}
我有几个模型继承客户:
public class CommercialCustomer : Customer, IAggregateRoot
{
public CommercialCustomer()
{
CustomerType = BusinessType.Commercial;
}
[DisplayName("Customer Name")]
public string BusinessName { get; set; }
}
public class ResidentialCustomer : Customer, IAggregateRoot
{
public ResidentialCustomer()
{
CustomerType = BusinessType.Residential;
}
[DisplayName("Customer Name")]
public string CustomerName { get; set; }
}
public class EducationalCustomer : Customer, IAggregateRoot
{
public EducationalCustomer()
{
CustomerType = BusinessType.Educational;
}
public string SchoolName { get; set; }
public string Department { get; set; }
}
等等。 要获取我使用的住宅客户列表:
IList<ResidentialCustomer> customers = _context.ResidentialCustomers.ToList();
我需要帮助的是如何获得作为超集的主客户列表?正如预期的那样,在 Customer 上调用 .ToList() 扩展方法只是 returns Id 属性。使用 SqlDataAdapter 我可以 return a table…
const string cmdString =
"SELECT Id, CONCAT(SchoolName + ', ' + Department, CustomerName, BusinessName) AS Name FROM Customers ORDER BY Name";
string connectionString = ConfigurationManager.ConnectionStrings["TestContext"].ConnectionString;
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand(cmdString, connection);
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataTable table = new DataTable();
adapter.Fill(table);
我真正需要的只是来自数据库的客户 Table 的原始内容来填充组合框。有没有更简洁的方法只使用 EntityFramework?
如果您首先在代码中使用 TPH,那么按照规定的方法是整个层次结构只有一个 DbSet,其中元素的类型是您的基本类型。然后使用 .Map
为基础实体上的派生类型设置条件。查询派生类型时,对一个实体集使用 .OfType<T>()
方法以按派生类型进行过滤。下面的简介显示了一个例子: