【发布时间】:2011-03-24 15:06:51
【问题描述】:
我有一个简单的映射,它正在工作,但它没有填写 Output.Details。
我有点困惑,我想这可能是因为我将源用作每个任务的“任务”。
Mapper.CreateMap<Task, Output>();
Mapper.CreateMap<Task, Output.Details>().ForMember(
dest => dest.Item, opt => opt.MapFrom(src => src.Name));
据我所知,我必须创建 2 个地图,1 个用于对象,1 个用于其中包含的对象。
问题是 OUTPUT 的来源,OUTPUT.DETAILS 可以在 TASK 中找到
我尝试深入研究第一个地图中的详细信息并指定 Mapfrom,但它给出了以下错误,这就是我必须创建 2 个地图的原因
must resolve to top-level member. Parameter name: lambdaExpression error
IList<Task> tempItems= GetItems();
IList<Output> items =
Mapper.Map<IList<Task>, IList<Output>>(tempItems);
地图有效,但我在 Output.Details 中可用的属性“项目”为 NULL
我做错了什么?这是我的 Destination 对象。
它填写 Name 没问题,但 DETAILS 里面什么都没有......它们被保留为 NULL。
Task 不是我的课,但我检查了它,所有值都可以复制,因此 Tag 有一个值并且是一个 STRING。
public class Output
{
public string Name { get; set; }
public Details Summary { get; private set; }
public class Details
{
public string Item{ get; set; }
}
public Output()
{
Summary = new Details();
}
}
编辑
这是一个Task类的例子。
编辑
他们是这里的一个示例 vs 2010 项目,它准确地显示了问题。
http://dl.dropbox.com/u/20103903/AutomapperNotWorking.zip
这是显示问题的图像,您可以看到摘要项为“NULL”,但它应该包含来自任务的名称。
【问题讨论】:
-
任务是什么样的?你可以为Task定义类吗?你的输出构造函数中的“属性”是什么?它不会出现在课堂上的任何地方。
-
嗨帕特里克,非常感谢您的回复。属性是一个错字:-) 抱歉,它的摘要实际上.. 它创建了实例.. 我更新了问题,并且我还包含了任务的图像.. 任务不是我的课程
-
您希望 Output.Summary 包含什么?您没有为它设置 Ignore() ,但 Task 没有 Summary 属性?现在,由于您没有有效的映射配置开始,因此很难提供帮助。有什么方法可以创建一个临时任务类来重现您遇到的特定问题?
-
嗨帕特里克,它的工作到目前为止 Output.Name 是从 Task.Name 中填充的,这是因为 Name 和 Name 存在于每个类 Task 和 Output 中,所以我不需要 MapFrom...他们匹配。 Output.Details.Name 未填写。它的NULL ...我正在尝试从Task.Name中填充它(作为测试)......因此它们不匹配所以我正在做一个MapFrom Task.Name >>>>> Output.Details.Name。这有帮助吗?我的输出类有 Output.Name 和 Output.Details 但是在 Output.Details 里面的 Name 是 = null ...没有发生映射。
-
我什至通过将 MapFrom 更改为 ResolveUsing 并设置解析器并在其中放置断点来确认这一点......它永远不会进入......
标签: c# automapper inner-classes