我想问你一个关于AutoMapper的问题.我们正在对我们的映射进行单元测试:
var dtoFiltrePersonne = new DtoFiltrePersonne { Prop1 = "Test", Prop2 = 1234 };
Mapper.CreateMap<FiltrePersonne, DtoFiltrePersonne>();
var filtrePersonne = DtoAutoMappeur<DtoFiltrePersonne, FiltrePersonne>.Instance.MapFromDtoToEntity(dtoFiltrePersonne);
Assert.AreEqual(dtoFiltrePersonne.Prop1, filtrePersonne.Prop1);
Assert.AreEqual(dtoFiltrePersonne.Prop2, filtrePersonne.Prop2);
Run Code Online (Sandbox Code Playgroud)
我想知道这个单元测试是否提供相同的覆盖范围?
Mapper.CreateMap<FiltrePersonne, DtoFiltrePersonne>();
AutoMapper.AssertConfigurationIsValid()
Run Code Online (Sandbox Code Playgroud)
我查看了AutoMapper配置文档,对我来说并不是很清楚.我是否需要对每个映射进行单元测试或仅使用该AssertConfigurationIsValid方法?
我正在尝试映射2个相同类型的对象.我想要做的是AutoMapper to toigonore所有属性,它们Null在源对象中有值,并保留目标对象中的现有值.
我已经尝试在我的"存储库"中使用它,但它似乎不起作用.
Mapper.CreateMap<TEntity, TEntity>().ForAllMembers(p => p.Condition(c => !c.IsSourceValueNull));
Run Code Online (Sandbox Code Playgroud)
可能是什么问题?
我在使用EF和AutoMapper时遇到了一些问题.= /
例如 :
我有2个相关实体(客户和订单),他们是DTO课程:
class CustomerDTO
{
public string CustomerID {get;set;}
public string CustomerName {get;set;}
public IList< OrderDTO > Orders {get;set;}
}
class OrderDTO
{
public string OrderID {get;set;}
public string OrderDetails {get;set;}
public CustomerDTO Customers {get;set;}
}
//when mapping Entity to DTO the code works
Customers cust = getCustomer(id);
Mapper.CreateMap< Customers, CustomerDTO >();
Mapper.CreateMap< Orders, OrderDTO >();
CustomerDTO custDTO = Mapper.Map(cust);
//but when i try to map back from DTO to Entity it fails with AutoMapperMappingException.
Mapper.Reset();
Mapper.CreateMap< CustomerDTO …
Run Code Online (Sandbox Code Playgroud) 我目前的项目包括域模型,MVC Web应用程序和单元测试的程序集.如何设置AutoMapper配置,以便所有程序集引用相同的配置?
我猜我可以在Global.asax中为web应用程序添加项目,但是如何在单元测试中使用它?此外,如果配置在Global.asax中,域模型是否会选择地图?
非常感谢,
KevDog.
我Mapper.DynamicMap()在一个泛型方法中使用.CreateMap(),并且希望在不使用的情况下忽略一些null的任何源值.这甚至可能吗?
最长的时间我一直在使用AutoMapper将我的域模型映射到我的DTO,以及将我的DTO映射回域模型.
我正在为我的ORM使用EF4,当映射的模型包含需要添加/更新/删除的子集合时,这种映射变得非常难看.当我继续我的项目时,我越来越多地遇到这个问题:博客文章的照片,订单的包裹等.
当从DTO->域模型出发时,我最终必须添加一个BeforeMap调用,从域模型的集合中删除所有实体,然后为从DTO获取每个实体的PK的集合添加自定义ValueResolver,抓取它来自数据库(以便实体框架不认为我正在添加新实体),并将其重新添加到域模型的集合中,然后将任何更新应用于各个字段.
这是一个非常难看的解决方案,但我尝试手动处理更新这些集合也是如此.有没有人有更清洁方法的建议?
我有两个类(MVC视图模型),它继承自一个抽象基类.
abstract class BaseModel { }
class Car : BaseModel
{
public string Speed { get; set; }
}
class Camper : BaseModel
{
public int Beds { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并希望使用基类配置AutoMapper,如:
Mapper.CreateMap<BaseModel, DataDestination>();
var someObj = new DataDastination();
Mapper.Map(instanceOfBaseModel, someObj);
Run Code Online (Sandbox Code Playgroud)
在这里我得到错误,因为Automapper没有Car或Camper的配置.尝试使用以下内容配置Automapper:
Mapper.CreateMap<BaseModel, DataDestination>()
.ForMember(dest => dest.SomeProp, mapper => mapper.MapFrom( .... ));
Run Code Online (Sandbox Code Playgroud)
在MapFrom中,我只看到基类的属性!如何配置Automapper以使用BaseClass,以及Car和Camper的特定ForMember表达式?例如,如果它是Car,则从此映射此属性,如果它是Camper,则从其他位置映射此属性.
我想测试方法中的自定义逻辑CreateMap.我不是要测试的映射是否都存在某些类型.
我该怎么做或者我需要知道的课程是什么.我很感激每一个提示文件.自动映射单元测试似乎非常罕见......
public class UnitProfile : Profile
{
protected override void Configure()
{
// Here I create my maps with custom logic that needs to be tested
CreateMap<Unit, UnitTreeViewModel>()
.ForMember(dest => dest.IsFolder, o => o.MapFrom(src => src.UnitTypeState == UnitType.Folder ? true : false));
CreateMap<CreateUnitViewModel, Unit>()
.ForMember(dest => dest.UnitTypeState, o => o.MapFrom(src => (UnitType)Enum.ToObject(typeof(UnitType), src.SelectedFolderTypeId)));
}
}
Run Code Online (Sandbox Code Playgroud) 我无法理解以下问题.我感觉它是LINQ和表达式树的限制,但不确定如何接受lambda体.我可以在不创建自定义转换器的情况下实现此目的
Mapper.CreateMap<I_NEWS, NewsModel>()
.ForMember(x => x.DateCreated, opt => opt.MapFrom(src => {
var dt = (DateTime)src.DateCreated;
return dt.ToShortDateString();
}));
Run Code Online (Sandbox Code Playgroud)
我收到此错误: 带有语句主体的lambda表达式无法转换为表达式树
我需要使用AutoMapper将对象映射到另一个对象.棘手的问题是如何在映射配置内或自定义类型转换器内访问映射器实例(IMapper实例)?
下面的代码不起作用,但它是我想要实现的一个例子 - 请注意mapper.Map调用并假设映射Customer => CustomerDto和Customer => DetailedCustomerDto定义.
var config = new MapperConfiguration(
cfg => cfg.CreateMap<Order, OrderDto>()
.ForMember(dst => dst.Customer, src => src.ResolveUsing(o => {
return o.Type == 1
? mapper.Map<Customer, CustomerDto>(o.Customer)
: mapper.Map<Customer, DetailedCustomerDto>(o.Customer)
})
);
Run Code Online (Sandbox Code Playgroud)
客户端部分是:
var mapper = config.CreateMapper();
var orderDto = mapper.Map<Order, OrderDto>(order);
Run Code Online (Sandbox Code Playgroud)
我要映射的对象的简化版本是:
public class Order
{
public int Type { get; set; }
public Customer Customer { get; set; }
}
public class Customer
{
public long Id …Run Code Online (Sandbox Code Playgroud) automapper ×10
c# ×8
.net ×5
asp.net-mvc ×2
unit-testing ×2
asp.net ×1
dto ×1
linq ×1
mapping ×1
repository ×1