我正在尝试设置AutoMapper以从实体转换为DTO.我知道我应该使用.ForMember()后Mapper.CreateMap<Entity, DTO>()设置自定义映射,但是这似乎并没有成为一个有效的方法.
编辑以供澄清:我不是要查找我已阅读的文档的链接,或者是基本语法的解释.我正在使用答案和文档中描述的正确语法,例如:
Mapper.CreateMap<EFAddress, Address>()
.ForMember(dest => dest.Code, opt => opt.MapFrom(src => src.Name));
Run Code Online (Sandbox Code Playgroud)
如果我在CreateMap <>中有一个无效的类型名称,我可以看到"ForMember"作为一个有效的方法,鼠标悬停显示方法签名,正如我通常所期望的那样.但是,只要我给它两个有效类型,ForMember说它无法解析符号,就好像该方法不可用一样.
对于我没有遇到的泛型类,是否存在某种约束?
谢谢
我试图在Visual Studio Premium 2012上使用NuGet将AutoMapper添加为项目的依赖项,但它失败了.
它说:
操作失败
'AutoMapper'已经为'Microsoft.CSharp'定义了依赖关系.
我可以添加其他依赖项.
我正在使用VS 2012的最新版本的软件包管理器:
NuGet包管理器2.8.60318.667
任何想法我应该检查什么?
我有课:
public class Person{ /* Props here */ }
public class PersonViewModel { /* Props here */ }
Run Code Online (Sandbox Code Playgroud)
然后是清单:
List<Person> people = new List<Person>();
List<PersonViewModel> peopleVM = Mapper
.MapList<Person, PersonViewModel>(people); //Problem here.
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么?
有没有办法做到这一点?我们有一个SummaryDto,它映射了三种不同的类型,当我们为每种类型创建一个map时,未映射的props会抛出错误.摘要dto上有大约35个属性.要在每个上使用Ignore()选项太麻烦了.全球忽视了吗?就像是
CreateMap<Source,Target>()
.IgnoreAllUnmapped();
Run Code Online (Sandbox Code Playgroud) 实体模型
public partial class Categoies
{
public Categoies()
{
this.Posts = new HashSet<Posts>();
}
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public Nullable<int> PositionId { get; set; }
public virtual CategoryPositions CategoryPositions { get; set; }
public virtual ICollection<Posts> Posts { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
查看模型
public class CategoriesViewModel
{
public int Id { get; set; }
[Required(ErrorMessage = "{0} alan? bo? b?rak?lmamal?d?r!")]
[Display(Name = "Kategori …Run Code Online (Sandbox Code Playgroud) 我有一节课:
public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有两个Person实例(person1和person2).我想将person2的内容复制到person1.我想在一个指令中制作此副本,而不是按属性制作属性:
person1.LastName = person2.LastName;
Run Code Online (Sandbox Code Playgroud)
在doc中,我看到将对象复制到另一个对象但类型不同.如何在类型相同时复制对象?
我使用自动映射器来映射多个对象(db类到ui对象).
地图1:
Mapper.CreateMap<sourceone, destination>().ForMember(sss => sss.one, m => m.MapFrom(source => source.abc));
Run Code Online (Sandbox Code Playgroud)
地图2:
Mapper.CreateMap<sourcetwo, destination>().ForMember(sss => sss.two, m => m.MapFrom(source => source.xyz));
destination d = new destination();
Run Code Online (Sandbox Code Playgroud)
//地图1
d = AutoMapper.Mapper.Map<sourceone, destination>(sourceone);
Run Code Online (Sandbox Code Playgroud)
//地图2
d = AutoMapper.Mapper.Map<sourcetwo, destination>(sourcetwo);
Run Code Online (Sandbox Code Playgroud)
一旦我调用'Map 2',使用Map 1填充的值就会丢失..(即destination.one变空).我该如何解决?
假设我有两个模型类:
public class People {
public string FirstName {get;set;}
public string LastName {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
还有一类电话:
public class Phone {
public string Number {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我想转换为PeoplePhoneDto,如下所示:
public class PeoplePhoneDto {
public string FirstName {get;set;}
public string LastName {get;set;}
public string PhoneNumber {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
让我们在我的控制器中说:
var people = repository.GetPeople(1);
var phone = repository.GetPhone(4);
// normally, without automapper I would made
return new PeoplePhoneDto(people, phone) ;
Run Code Online (Sandbox Code Playgroud)
我似乎找不到这个场景的任何例子.这可能吗 ?
注意:示例不是真实的,仅针对此问题.
除了AutoMapper之外,.NET中的对象到对象映射有哪些不同的替代框架
目前我们计划使用AutoMapper,但在最终确定此框架之前,我们希望了解其他任何框架.
我有这种情况,我想将实体映射到viewmodel并返回.我必须使用ForMember()显式指定映射,因为它们的属性不共享完全相同的名称.这是我的类看起来如何的简短示例:
public class PartTwo {
public int Integer { get; set; }
}
public class PartTwoViewModel {
public int PartInteger { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想用这种方式使用它们:
Mapper.CreateMap<PartTwo, PartTwoViewModel>()
.ForMember(dst => dst.PartInteger, opt => opt.MapFrom(src => src.Integer))
.ReverseMap();
var partTwoViewModel = new PartTwoViewModel() { PartInteger = 42 };
var partTwo = Mapper.Map<PartTwoViewModel, PartTwo>(partTwoViewModel);
Assert.AreEqual(partTwoViewModel.PartInteger, partTwo.Integer);
Run Code Online (Sandbox Code Playgroud)
但它与PartInteger属性不匹配.(整数为0.)
有没有办法让这项工作?(当两个类的属性具有相同的名称时.)我是否必须在方法ForMember()中设置某种选项?