我有一个简单的测试解决方案,它包含两个项目(一个'业务'层和一个数据访问层),使用Catel将两者结合在一起 - 工作正常,没有问题。
然而,一直在阅读AutoMapper如何通过允许轻松填充DTO来帮助围绕这样的设置移动数据,并决定让它看看......这就是我的问题开始的时候!
我正在使用Entity Framework 6.1,VS 2013 Express for Desktop和访问SQL Server Express 14 db - 在我的视图中没有正确显示数据检索和数据的问题。
使用NuGet添加了AutoMapper。
为了使用AutoMapper,我在App.xaml.cs中设置了以下内容
private void InitializeAutomapper()
{
Mapper.CreateMap<Result, ResultDto>();
Mapper.AssertConfigurationIsValid();
}
此代码是我在'OnStartup'中调用的第一个项目。
我的业务层中的服务调用数据访问层并检索结果列表。
随后,我从此列表中获取一个实体,并在AutoMapper映射调用中使用它。
我正在尝试使用以下
从此单个实体填充resultDTOResult res = ResultList.First();
ResultDto resultDTO = Mapper.Map<Result, ResultDto>(res);
'res'正确填充了数据,但resultDTO填充了各个数据类型的默认值(in = 0,string = null,DateTime = {01/01/0001 00:00:00})ie; 没有值从源映射到目标。
在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'从外部源传递到上面 - 似乎工作正常。
总结一下 -
希望这有帮助!
答案 0 :(得分:1)
默认情况下,类成员声明为private
,除非另有说明,因此ResultDto
属性在类之外是不可见的。
public class ResultDto
{
int Div { get; set; }
....
}
需要
public class ResultDto
{
public int Div { get; set; }
....
}
答案 1 :(得分:0)
AutoMapper可以从提供的参数中计算出您要映射的类型。试试这个:
ResultDto resultDTO = Mapper.Map<ResultDto>(res);
<强>更新强> 这是错误的,或者至少不会得到帮助。我们需要查看评论中提到的源类和目标类。