【发布时间】:2014-11-10 20:49:57
【问题描述】:
我有一个简单的测试解决方案,它包含两个项目(一个“业务”层和一个数据访问层),使用 Catel 将两者联系在一起 - 工作正常,没有问题。
但是,我一直在阅读 AutoMapper 通过允许轻松填充 DTO 来帮助在这种设置中移动数据方面有多么有用,并决定试一试......这就是我的问题开始的时候!
我正在使用 Entity Framework 6.1、VS 2013 Express for Desktop 并访问 SQL Server Express 14 db - 数据检索没有问题,并且数据在我的视图中正确显示。
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 而添加的所有内容。我可以看到,从概念上讲它有多么有用 - 我只需要弄清楚如何实现它,以便感激地收到任何帮助/cmets...:)
编辑 @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”是从外部来源传递到上面的 - 似乎工作正常。
总结一下——
- 我生成 ResultList 作为 Result 实体的列表。
- 用列表中的第一个实体填充结果。
- 尝试将此 Result 实体映射到 ResultDTO
- 失败:(
希望这会有所帮助!
【问题讨论】:
-
你能显示
Result和ResultDto类吗? -
您是否通过 EF 获得
Result?如果源对象是 EF 代理,则会出现复杂情况,一种解决方案是使用 Queryable Extensions to AutoMapper
标签: c# automapper