自动映射外键

时间:2016-03-07 08:14:41

标签: c# entity-framework asp.net-web-api

我在WebApi2项目中使用Automapper和代码优先的EF6。我将模型类作为POCO,每个模型类都有一个EntityTypeConfiguration类。

我也有DTO课程。这些类不公开外键属性,我告诉Automapper忽略外键。

一个例子是:

public partial class UserGroupModel
{
    public UserGroupModel()
    {
        this.Users = new List<UserGroupUserModel>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<UserGroupUserModel> Users { get; set; }
}

public partial class UserModel
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public partial class UserGroupUserModel
{
    public int Id { get; set; }
    public int UserGroupId { get; set; }
    public int UserId { get; set; }
    public virtual UserGroupModel { get; set; }
    public virtual UserModel { get; set; }
}

所以,DTO类看起来像这样:

public partial class UserGroupUserDto
{
    public int Id { get; set; }
    public virtual UserGroupDto { get; set; }
    public virtual UserDto { get; set; }
}

当从DTO映射到Model时实体被分离,并且由于DTO类没有外键属性(在本例中为UserGroupIdUserId,因此这些属性的值始终为0所以在致电SaveChanges之前,我必须这样做:

public override UserGroupModel Update(UserGroupModel entity)
{
    entity.Users.ToList()
                .ForEach(x => {
                    x.UserGroupId = entity.Id;
                    x.UserId = x.User.Id;
                });

    //Update db here...
}

有没有更好的处理这种情况?可能注释属性会创建更清晰的代码吗?

0 个答案:

没有答案