-1

以下にリストされているデータベーステーブルに対応する次のモデルがあります。

マネージャーは従業員です。会計士も社員です。

  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. 1 人の従業員が複数の役割を持つことができます。
4

1 に答える 1

2

ただ行う:

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

ただし、これは従業員をモデル化するための非常に悪い方法です.会計士が転職した場合、そのオブジェクトを削除して再作成する必要があります..

ドメインモデルの継承と列挙型プロパティに関する私の回答を参照してください。

于 2012-07-27T07:48:06.997 に答える