- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我已经尝试解决这个问题一天了,但一无所获,所以我希望有人可能已经解决了这个问题。我找到的最接近解决方案的是 How to simply map an NHibernate ISet to IList using AutoMapper和 Map IList to ICollection through AutoMapper但仍然没有快乐。
我有一个如下所示的数据对象:
public class Parent
{
public virtual ISet<Child> Children {get; set; }
}
还有一个如下所示的业务对象:
public class ParentDto
{
public IList<ChildDto> Children {get; set; }
}
使用 AutoMapper 将数据映射到业务工作正常:
...
Mapper.CreateMap<Parent, ParentDto>();
Mapper.CreateMap<Child, ChildDto>();
...
ParentDto destination = CWMapper.Map<Parent, ParentDto>(source);
但是当我谈到从业务到数据的映射时,我得到了错误:
...
Mapper.CreateMap<ParentDto, Parent>();
Mapper.CreateMap<ChildDto, Child>();
...
Parent destination = CWMapper.Map<ParentDto, Parent>(source);
Unable to cast object of type 'System.Collections.Generic.List' to ''Iesi.Collections.Generic.ISet'
我添加了一个自定义映射:
Mapper.CreateMap<ParentDto, Parent>()
.ForMember(m => m.Children, o => o.MapFrom(s => ToISet<ChildDto>(s.Children)));
private static ISet<T> ToISet<T>(IEnumerable<T> list)
{
Iesi.Collections.Generic.ISet<T> set = null;
if (list != null)
{
set = new Iesi.Collections.Generic.HashedSet<T>();
foreach (T item in list)
{
set.Add(item);
}
}
return set;
}
但我仍然得到同样的错误。任何帮助将不胜感激!
最佳答案
你可以使用AutoMapper的AfterMap()函数,像这样:
Mapper.CreateMap<ParentDto, Parent>()
.ForMember(m => m.Children, o => o.Ignore()) // To avoid automapping attempt
.AfterMap((p,o) => { o.Children = ToISet<ChildDto, Child>(p.Children); });
AfterMap() 允许对 NHibernate 子集合处理的一些重要方面进行更细粒度的控制(例如替换现有集合内容而不是像这个简化示例中那样覆盖集合引用)。
关于c# - 使用 AutoMapper 将 IList<TSource> 映射到 (Iesi.Collections.Generic) ISet<TDestination>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6722491/
我想通过例子来理解TSource,Tkey的概念。 我们有代码 class Pet { public string Name { get; se
我有一个关于 LINQ 中的棘手问题的问题(对我来说几乎是棘手的!)。 可以写出下面的linqQuery string[] digits = { "zero", "one", "two", "thre
假设有两个列表 A 和 B,因此 A = (1,2,3) 和 B = (4,5,6)。 A.Concat(B) 会保留顺序以便结果为 (1,2,3,4,5,6) 吗? 最佳答案 是的。 IEnumer
有什么区别 public static IEnumerable Where (this IEnumerable source, Func predicate) 和 public sta
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
我有字典,比如 Dictionary accValues = new Dictionary() 我想获取特定键的 bool 值。我可以通过 foreach 来完成,比如 foreach (KeyVal
我有一个包含很多 DbSet 的 DbContext。每个 DbSet 都应该有一个函数来从集合中获取一页项目,具有给定的 pageSize 并按特定的 sortOrder 排序。像这样的东西: va
在 Linq 中,当我调用 SingleOrDefault 或 FirstOrDefault 时,如何为特定对象返回 null 以外的内容,例如。 List cc = CrazyCon
在我们的应用程序中,我们使用 ReactiveUI 来遵循 MVVM 模式。在一个 View 中,我们想要显示一个 UITableView。数据通常传递给 UITableView.Source 但对于
在MSDN help page on Enumerable.FirstOrDefault Method有一个方法结果解释为: default(TSource) if source is empty;
我有下面的代码示例,我想在其中 prepend源参数前面的一些文本,可以是 ISite 或 IFactory 类型,通过 MoreLinq extension 在 MVC 下拉列表中使用.此函数用于返
很多语句(在 Linq 中经常看到)在不需要编译或执行时使用 TSource。为什么要指定 TSource? 例子: List list = new List(5) { 0, 1, 2, 0, 3
IEnumerable公开一个枚举器,因此可以枚举对象。此接口(interface)公开的索引没有任何内容。 IList关于索引,因为它公开了 IndexOf方法。 那么 Enumerable.Ele
我正在开发一个基于 Asp.net MVC 3.0 的大型系统,并在 Mono-2.10.8 (Windows 7) 上工作。 几天前一切都很好。 在我的 API 中,我有几个使用字典的实用程序类。例
我正在尝试创建一个表示以下内容的表达式树: myObject.childObjectCollection.Any(i => i.Name == "name"); 为清楚起见,我有以下内容: //'my
我想确认 https://stackoverflow.com/a/10387423/368896 的答案是正确的,适用于以下情况: // These IDataHolder instances con
我正在尝试通过 List> 进行枚举,但未成功过滤 List 的集合.当 display() 时,我的代码编译,但只返回整个列表,未经过滤。被调用。 我的问题是,保存可用于过滤另一个集合的 lambd
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 2 年前。 Improve t
我有以下 linq 语句: List allTypes = group.GetTypes().Union(group2.GetTypes()).ToList(); 当 group2 为 null 时可
问题 什么是TSource? 这是一个 example from MSDN : public static IEnumerable Union( this IEnumerable first,
我是一名优秀的程序员,十分优秀!