c# - 从 EDMX 中分离实体类 (DTO) 的实用方法

标签 c# entity-framework edmx three-tier

我有一个三层应用

DAL 有 EDMX 文件,EF6 从数据库自动生成它(DB First 模式)。 我也有 BLL 和 UL 层。

但是,当我想在 UI 中使用 BLL 方法时,我必须将 DAL 程序集添加到 UI 层(因为方法的返回类型)

List<Person> 

Person define in EDMX (DAL)] (这是我的问题)

如何我可以将类 (DTO) 从 EDMX 文件中分离出来并创建为单独的程序集?

如何防止将 DAL 程序集(整个 EDMX)添加到 UI 层?

最佳答案

这是我会做的。要将 DAL 与 UI 分离,您将需要一个“中间层”。考虑下图。

enter image description here

中间层被广泛称为服务层或应用层。

每次 Person 数据从一层传递到另一层时,它都会“映射”到该特定层的等效类。

以下片段构成了服务层的最基本示例。我没有包括其他细节,例如 AutoMappers 和其他一般做法。

在中间层定义的 PersonDto 表示 Person 实体。

public class PersonDto
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

PersonService 类。它封装了数据访问和业务逻辑,并且只返回 PersonDto(而不是实体)。这是 UI 与域通信的方式。

public class PersonService
{
    public PersonDto GetPersonById(int id)
    {
         Person person = dbContext.Persons.Find(id);
         
         // Mapping in action.
         var personDto = new PersonDto()
         {
             FirstName = person.FirstName,
             LastName = person.LastName,
         };

         return personDto;
    }
}

PersonService 是 UI 代码看到的,它不知道数据访问或业务逻辑。它只知道服务。

服务应封装您的业务逻辑,将 UI 与 BLL 和 DAL 分离。

关于c# - 从 EDMX 中分离实体类 (DTO) 的实用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23711086/

相关文章:

c# - edmx 计算列

c# - 通过关联表的 Entity Framework 1to1 关系在 EDMX 中不起作用

c# - 如何使用 Microsoft Speech 从语音模式中识别说话者?

c# - WCF 应用端点

c# - await 运算符没有像我预期的那样等待

entity-framework - 实体数据模型,唯一索引

sql - 使用 EF 和 Oracle 表的 LINQ 查询非常慢

database - 默认 ASP.NET MVC 3 项目帐户 Controller 如何工作

c# - Visual Studio 2013 - Entity Framework - 更新向导没有响应

C# Excel - 将每个工作表保存到一个新工作簿