实体框架:获取资源库子类对象 [英] Entity Framework: Get Subclass objects in Repository

查看:215
本文介绍了实体框架:获取资源库子类对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下模式对应于下面列出的数据库表。

一个经理是员工。会计师也是一个员工。

  1. 什么是让存储库中的所有管理人员的最佳方法是什么?如何实现GetAllManagers()方法?
  2. 是不是正确的TPT?

code

  MyRepository.MyEmployeeRepository代表=新MyEmployeeRepository();
名单<员工> E = rep.GetAllEmployees();



公共类MyEmployeeRepository
{
    私人字符串connectionStringVal;
    公共MyEmployeeRepository()
    {
        SqlConnectionStringBuilder sqlBuilder =新SqlConnectionStringBuilder();
        sqlBuilder.DataSource =。;
        sqlBuilder.InitialCatalog =LibraryReservationSystem;
        sqlBuilder.IntegratedSecurity = TRUE;

        //初始化EntityConnectionStringBuilder。
        EntityConnectionStringBuilder entityBuilder =新EntityConnectionStringBuilder();
        entityBuilder.Provider =System.Data.SqlClient的;
        entityBuilder.ProviderConnectionString = sqlBuilder.ToString();
        entityBuilder.Metadata = @RES://*/Test.csdl |高分辨率://*/Test.ssdl |高分辨率://*/Test.msl;

        connectionStringVal = entityBuilder.ToString();


    }


    公开名单<员工> GetAllEmployees()
    {

        名单<员工>员工=新的名单,其中,员工>();
        使用(VAR上下文=新MyEntityDataModelEDM.LibraryReservationSystemEntities1(connectionStringVal))
        {
            的foreach(在context.Employees MyEntityDataModelEDM.Employee P)
            {
                employees.Add(对);
            }
        }

        返回的员工;
    }

    公开名单<经理> GetAllManagers()
    {

        名单<经理>管理人员=新的名单,其中,经理>();
        使用(VAR上下文=新MyEntityDataModelEDM.LibraryReservationSystemEntities1(connectionStringVal))
        {


        }

        返回管理人员;
    }



}
 

修改

该模式有弊端。它应考虑以下几点:

  1. 员工可以在没有任何作用,他创建的。
  2. 在一个员工可以有多个角色。
解决方案

只要做到:

 返回context.Employees.OfType<会计>()了ToList()。
 

但是,这是一个非常糟糕的方式来模拟的员工。如果会计师变化的工作,你需要杀掉并重新创建该对象。

请参阅我的<一个答案href="http://stackoverflow.com/questions/4254182/inheritance-vs-enum-properties-in-the-domain-model/4254783#4254783">Inheritance VS域模型枚举属性。

I have following model corresponding to the database tables listed below.

A manager is an employee. An accountant also is an employee.

  1. What is the best method to get all managers in the repository? How to implement GetAllManagers() method?
  2. Is it proper TPT?

CODE

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;
    }



}

EDIT

This model has drawbacks. It should consider following:

  1. Employee can be created without any role for him.
  2. One employee can have multiple roles.

解决方案

Just do:

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

This is however a really bad way to model employees.. if an accountant changes job, you need to kill and recreate that object..

See my answer on Inheritance vs enum properties in the domain model.

这篇关于实体框架:获取资源库子类对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆