gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 23:14:49 24 4
gpt4 key购买 nike

我有一个三层应用

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com