如何通过从不同的表中查找属性从id映射到字符串?

时间:2016-12-21 09:58:05

标签: asp.net-mvc automapper

public class GebruikerModel
{
    public String Gebruikersnaam { get; set; }
    public String Wachtwoord { get; set; }
    public String FaculteitModelNaam { get; set; }
    public String InstellingModelMNaam { get; set; }

}

public class FaculteitModel
{
    public String Naam { get; set; }
}                                                                                     

public class InstellingModel
{
    public String naam { get; set; }
}

用户(Gebruiker)存储在数据库中,如下所示:

int id; (PK) 
String name 
int FaculteitId
int InstellingId

教师(faculteit)和学校(instelling)如下:

int id; (PK) 
String name;

编辑:使用Linq to SQL创建域模型。

显然,我的观点中不需要任何ID。所以我正在尝试使用automapper:

GebruikerModel singleUser = Mapper.Map<Gebruiker, GebruikerModel>(db.Gebruikers.FirstOrDefault());

并获取错误:(目标成员列表)\ r \ n \ r \ n未映射的属性:\ r \ nFaculteitModelNaam \ r \ nInstellingModelMNaam \ r \ n“} AutoMapper.AutoMapperConfigurationException

如何配置automapper以从教师和学校获取名称以将其映射到我的viewmodel?

1 个答案:

答案 0 :(得分:1)

我的代码不清楚。我在这里给出一个可以帮助你的例子。

<强>型号1

  public class class1
    {
        public string ID1 { get; set; }
        public string Name1 { get; set; }

    }

<强>模型2

 public class class2
    {
        public int ID2 { get; set; }
        public string Name2 { get; set; }

    }

请注意,ID1和ID2具有不同的数据类型。现在,如果你想将class2映射到class1,你的配置将是这样的。

您的配置和映射:

class2 c2 = new class2 { ID2 = 1, Name2 = "Test" };

    Mapper.Initialize(cfg =>
                {
                    cfg.CreateMap<class2, class1>()
                    .ForMember(dest => dest.ID1, opts => opts.MapFrom(src => src.ID2.ToString()))
                    .ForMember(dest => dest.Name1, opts => opts.MapFrom(src => src.Name2));

                });


    var data = Mapper.Map<class1>(c2);

或者,如果属性名称是&#39;名称&#39;在两个型号中,您的配置都将是。

 Mapper.Initialize(cfg =>
            {
                cfg.CreateMap<class2, class1>()
                .ForMember(dest => dest.ID1, opts => opts.MapFrom(src => src.ID2.ToString()));                

            });

注意:在这种情况下,反向映射无法使用.Reverse()方法,您必须通过正确转换来反转源和目标来创建新配置。