2

Entity Framework によって生成された DAL に Entity(EF) があります。

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

より良い方法:

コントラクト (インターフェイス) を削除し、ユーザー (EF) を BLL に直接転送するか、この問題を解決するための解決策をアドバイスしてください。アーキテクチャの観点から契約(インターフェース)を削除するのは正しいですか?

4

1 に答える 1

0

DTO を作成する最も重要な目的はDomainModel、DAL からカップルを失うDTO Modelことです。その場合、それらをインターフェイスで再度結合するのは完全に間違っています。

大規模で複雑なプロジェクトがない限り、DomainModel と同じ EF モデルを使用し、それを BLL で使用することをお勧めします。

その場合、あなたはDomainModelあなたの DAL にあなたを渡す必要があります. AutoMapperその後、手動マッピングのようなツールを使用できます

于 2016-01-03T12:59:52.813 に答える