【问题标题】:Design pattern for mapping database in Data Access Layer [C#]数据访问层中映射数据库的设计模式 [C#]
【发布时间】:2017-04-22 04:00:25
【问题描述】:

我在使用数据映射器模式的数据访问层上工作。我的实际代码结构例如:

public class Person {
    public int Age
    public string FirstName
    public string LastName
    public List<Address> Addresses
    ...
}

public class PersonMapper {
    public Person GetPersonById(int id)
    public List<Person> GetAll()
    public bool UpdatePerson(Person person)
    ...
}

我有很多类对应同名的数据库表。

我的问题是:

  1. 我的方法对吗?当我映射所有表时,我将在域层中使用它。

  2. 在 Mapper 类中,我使用的方法仅适用于与这些类同名的表。 (Person class -> Persons db 表,Order class -> Orders db 表等)但是从数据库映射高级选择的最佳方法是什么,它将包含与更多表的连接。例如,我想选择Person 和他的所有Orders. 我应该为将包含属性List&lt;Orders&gt; 的Person 创建域模型并使用PersonMapper 和下一个OrderMapper

【问题讨论】:

  • 我不知道为什么它被称为映射器。对我个人而言,它是一个存储库。如果可以的话,我会使用实体框架来为我完成所有这些工作。
  • EF 我无法使用...为什么是存储库?
  • @DenisStephanov:在DataAccessLayer 世界中,您的PersonMapper 类通常称为PersonRepositoryMapper这个词在DAL中有不同的含义。
  • 那我应该重命名它吗?存储库和映射器之间有何不同? :/ 我迷失在其中

标签: c# design-patterns mapping data-access-layer business-layer


【解决方案1】:

参见DAO 模式。

一般来说:对于数据库中的每个表,您都有一个实体和一个实体的 Dao 类,还有一个与数据库通信的数据库类。

例如 Person、PersonDao、Database。

人就是实体。 PersonDao 使用 Database 类仅针对人员表查询数据库。 Database 是数据库的一个 CRUD 类。

【讨论】:

    猜你喜欢
    • 2010-11-06
    • 2015-02-27
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 2014-07-18
    相关资源
    最近更新 更多