繁体   English   中英

自动映射器未从源填充目标

[英]Automapper not populating destination from source

我有一个简单的测试解决方案,它由两个项目组成(一个“业务”层和一个数据访问层),使用Catel将两个项目结合在一起-可以正常工作,没有问题。

但是,一直在阅读有关AutoMapper通过允许轻松填充DTO来帮助在这样的设置中移动数据的有用性,并决定让它看起来...那是我的问题开始的时候!

我使用的是Entity Framework 6.1,VS 2013 Express for Desktop,并且正在访问SQL Server Express 14数据库-数据检索和数据在我的视图中正确显示都没有问题。

AutoMapper是使用NuGet添加的。

为了使用AutoMapper,我在App.xaml.cs中设置了以下内容

private void InitializeAutomapper()
{
    Mapper.CreateMap<Result, ResultDto>();
    Mapper.AssertConfigurationIsValid();
}

这段代码是我的“ OnStartup”内部调用的第一项。

我的业务层中的服务调用数据访问层,并检索结果实体的列表。

随后,我从该列表中选取一个实体,并在AutoMapper映射调用中使用该实体。

我正在尝试使用以下方法从该单个实体填充resultDTO

Result res = ResultList.First();
ResultDto resultDTO = Mapper.Map<Result, ResultDto>(res);

“ res”已正确填充了数据,但resultDTO填充了各个数据类型的默认值(in = 0,string = null,DateTime = {01/01/0001 00:00:00}),即; 没有值从源映射到目标

在这两个项目中都有对AutoMapper和AutoMapper.Net的引用,并且不会引发任何错误-它只是不能像所宣传的那样工作...

我并没有放弃软件,只是问做错了什么!

我意识到这里没有太多代码需要处理,但实际上,这里发布的内容几乎是我为试用AutoMapper添加的所有内容。 从概念上我可以看到它有多有用-我只需要弄清楚如何实现它,以便感激收到任何帮助/评论... :)

根据要求编辑 @Andrew-

结果类别:

public partial class Result
{
    public int Div { get; set; }
    public System.DateTime Date { get; set; }
    public string HomeTeam { get; set; }
    public string AwayTeam { get; set; }
    public int FTHG { get; set; }
    public int FTAG { get; set; }
    public string FTR { get; set; }
}

ResultDTO类:

public class ResultDto
{
    int Div { get; set; }
    DateTime Date { get; set; }
    string HomeTeam { get; set; }
    string AwayTeam { get; set; }
    int FTHG { get; set; }
    int FTAG { get; set; }
    string FTR { get; set; }

    // Added tonight to try and get it to work
    public ResultDto()
    {
        Div = 0;
        Date = DateTime.Now;
        HomeTeam = null;
        AwayTeam = null;
        FTHG = 0;
        FTAG = 0;
        FTR = null;
    }
}

@stuartd,以下内容用于检索从中获取Result的ResultList:

// Produce a list of DataLayer.Result entities.
 var ResultList = (from x in dbContext.Results.Local
                   where x.HomeTeam == team.TeamName.ToString() || x.AwayTeam == team.TeamName.ToString()
                   orderby x.Date
                   select x).ToList();

请注意,“ team.Teamname”是从外部来源传递到上面的-看起来工作正常。

总结一下-

  1. 我产生ResultList作为Result实体的列表。
  2. 用列表中的第一个实体填充结果。
  3. 尝试将此Result实体映射到ResultDTO
  4. 失败:(

希望这可以帮助!

默认情况下,除非另外指定,否则将类成员声明为private成员,因此ResultDto属性在类外部不可见。

public class ResultDto
{
    int Div { get; set; }
    ....
}

需要是

public class ResultDto
{
    public int Div { get; set; }
    ....
}

AutoMapper可以根据提供的参数计算出您正在映射的类型。 尝试这个:

ResultDto resultDTO = Mapper.Map<ResultDto>(res);

更新这是错误的,或者至少没有帮助。 我们需要查看注释中提到的源类和目标类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM