【问题标题】:Entity Framework: Get Subclass objects in Repository实体框架:在存储库中获取子类对象
【发布时间】:2012-07-27 07:44:52
【问题描述】:

我有下面列出的数据库表对应的模型。

经理是雇员。会计师也是雇员。

  1. 在存储库中获取所有管理器的最佳方法是什么?如何实现 GetAllManagers() 方法?
  2. TPT 合适吗?

代码

MyRepository.MyEmployeeRepository rep = new MyEmployeeRepository();
List<Employee> e = rep.GetAllEmployees();



public class MyEmployeeRepository
{
    private string connectionStringVal;
    public MyEmployeeRepository()
    {
        SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();
        sqlBuilder.DataSource = ".";
        sqlBuilder.InitialCatalog = "LibraryReservationSystem";
        sqlBuilder.IntegratedSecurity = true;

        // Initialize the EntityConnectionStringBuilder.
        EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
        entityBuilder.Provider = "System.Data.SqlClient";
        entityBuilder.ProviderConnectionString = sqlBuilder.ToString();
        entityBuilder.Metadata = @"res://*/Test.csdl|res://*/Test.ssdl|res://*/Test.msl";

        connectionStringVal = entityBuilder.ToString();


    }


    public List<Employee> GetAllEmployees()
    {

        List<Employee> employees = new List<Employee>();
        using (var context = new MyEntityDataModelEDM.LibraryReservationSystemEntities1(connectionStringVal))
        {
            foreach (MyEntityDataModelEDM.Employee p in context.Employees)
            {
                employees.Add(p);
            }
        }

        return employees;
    }

    public List<Manager> GetAllManagers()
    {

        List<Manager> managers = new List<Manager>();
        using (var context = new MyEntityDataModelEDM.LibraryReservationSystemEntities1(connectionStringVal))
        {


        }

        return managers;
    }



}

编辑

这个模型有缺点。它应该考虑以下几点:

  1. 可以在没有任何角色的情况下创建员工。
  2. 一名员工可以担任多个角色。

【问题讨论】:

  • 这个模型有缺点。它应该考虑以下几点: 可以在没有任何角色的情况下创建员工。一名员工可以担任多个角色。

标签: c# .net entity-framework design-patterns domain-driven-design


【解决方案1】:

只要做:

return context.Employees.OfType<Accountant>().ToList()

然而,这是对员工进行建模的一种非常糟糕的方法。如果会计师换工作,您需要杀死并重新创建该对象。

Inheritance vs enum properties in the domain model 上查看我的回答。

【讨论】:

  • 我会使用角色来完成,例如一个员工或个人可以有一组分配给它的角色。
  • 并让行为存在于角色中,这样,您不必每次获得新职位时都杀死每个员工..
  • 另外,经理和会计师的行为可能属于不同的有界上下文。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多