私はこれを長時間にわたって稼働させようとしてきました。私は見つけることができたすべてのオートマッパの質問を見てきましたが、まだ運がありません。Automapper多対多
Automapperを設定して、ビジネスエンティティとデータベースモデル間で多対多のプロパティを適切にマッピングするにはどうすればよいですか?
DBの最初のデータモデルを使用しているリポジトリパターンを使用しています。
は、私はこれらのエンティティオブジェクトを持っている:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public DateTime CreateDate { get { return DateTime.Now; } private set { } }
public List<Department> Departments { get; set; }
public List<Company> Companies { get; set; }
}
public class Department
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime CreateDate { get { return DateTime.Now; } private set { } }
}
public class Company
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime CreateDate { get { return DateTime.Now; } private set { } }
}
私はこれらを更新できるようにする必要があります。それらをdbオブジェクトにマップする必要があるので、ユーザーを更新できます。
public partial class User{
public int Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public Nullable<System.DateTime> CreateDate { get; set; }
public virtual ICollection<UsersCompany> UsersCompanies { get; set; }
public virtual ICollection<UsersDepartment> UsersDepartments { get; set; }
}
public partial class UsersCompany
{
public int Id { get; set; }
public int UserId { get; set; }
public int CompanyId { get; set; }
public virtual Company Company { get; set; }
public virtual User User { get; set; }
}
public partial class UsersDepartment
{
public int Id { get; set; }
public int UserId { get; set; }
public int DepartmentId { get; set; }
public virtual Department Department { get; set; }
public virtual User User { get; set; }
}
エンティティを渡して、それをdbモデルにマップする方法があります。これはオートマトンに私のジョインテーブルを丁寧にマップさせるための約100回の試行の後、私が今持っていることです。
private DBUser ToDataModel(User user)
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<User, DBUser>()
.ForMember(dest => dest.UsersDepartments, opt => opt.MapFrom(x => x.Departments));
cfg.CreateMap<User, DBUsersDepartment>()
.ForMember(x => x.User, y => y.MapFrom(z => z));
cfg.CreateMap<Department, DBUsersDepartment>();
});
IMapper mapper = config.CreateMapper();
return mapper.Map<DBUser>(user);
}
これは(ユーザ情報がマッピングされていない注意してください)私は 'マップ' それの後に何を参照してくださいです:
あなたも 'DBUser'クラスを投稿できますか?あなたの部分クラスも同様のプロパティを持っていますか? –
はい、ごめんなさい。部分クラスは本質的にDBUserです。同じクラス。 – utd1878