gpt4 book ai didi

c# - 如何将 Entity(EF) 和 EntityDTO 与 Contract(Interface) 一起使用

转载 作者:太空宇宙 更新时间:2023-11-03 15:27:42 25 4
gpt4 key购买 nike

我在 DAL 中有一个实体 (EF),它是由 Entity Framework 生成的。

public partial class User : IUser
{
public Guid Id { get; set; }

[Required]
[StringLength(20)]
public string Login { get; set; }

[Required]
[StringLength(25)]
public string Password { get; set; }

[Required]
[StringLength(50)]
public string Email { get; set; }

[StringLength(30)]
public string Lastname { get; set; }

[StringLength(30)]
public string Firstname { get; set; }

[StringLength(200)]
public string Avatar { get; set; }

public Guid? DepartmentId { get; set; }
public Guid? RoleId { get; set; }
public virtual Department Department { get; set; }
public virtual Role Role { get; set; }
}

我已经在 BLL 中创建了 UserDto

public class UserDto : IUser
{
public Guid Id { get; set; }
public string Login { get; set; }
public string Password { get; set; }
public string Email { get; set; }
public string Lastname { get; set; }
public string Firstname { get; set; }
public string Avatar { get; set; }
public DepartmentDto Department { get; set; }
public RoleDto Role { get; set; }
public Guid? DepartmentId { get; set; }
public Guid? RoleId { get; set; }
}

要在 DAL 和 BLL 之间传输数据,我正在使用 Contract(Interface)

public interface IUser
{
Guid Id { get; set; }
string Login { get; set; }
string Password { get; set; }
string Email { get; set; }
string Lastname { get; set; }
string Firstname { get; set; }
string Avatar { get; set; }
}

在这种情况下,如何在 DAL 和 BLL 之间传输导航字段?像这样:

public virtual Department Department { get; set; }
public virtual Role Role { get; set; }

怎么做更好:

移除合约(接口(interface))并将User(EF)直接转移到BLL或建议解决方案来解决这个问题。从架构的角度移除契约(接口(interface))是否正确?

最佳答案

创建 DTO 的最重要目的是让你的 DomainModel 与你的 DAL DTO Model 脱钩。 那么再通过一个接口(interface)将它们耦合起来就完全不对了。

我建议您使用与您的 DomainModel 相同的 EF 模型并在您的 BLL 中使用它,除非您有一个大型和复杂的项目,然后通过拥有真正丰富的 DomainModel 来更严格地执行 DDD 是可以的。

在那种情况下,您应该将您的 DomainModel 传递给您的 DAL,仅此而已,所有映射都应该在您的 DAL 的内部。然后您可以使用一些工具,例如 AutoMapper 或只是手动映射

关于c# - 如何将 Entity(EF) 和 EntityDTO 与 Contract(Interface) 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34576435/

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