我使用EF Code First创建了具有彼此集合的类.实体:
public class Field
{
public int Id { get; set; }
public string Name { get; set; }
public virtual List<AppUser> Teachers { get; set; }
public Field()
{
Teachers = new List<AppUser>();
}
}
public class AppUser
{
public int Id { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public string UserName => Email;
public virtual List<Field> Fields { get; set; }
public AppUser()
{
Fields …Run Code Online (Sandbox Code Playgroud) 什么是Automapper?
它对我的域和控制器层(asp.net mvc)有什么帮助?
我想知道是否可以使用Automapper将多个DTO对象映射到单个ViewModel对象?
本质上,我有多个DTO对象,并希望在ASP.NET MVC 2.0中的单个屏幕上显示每个对象的信息.为此,我想将DTO对象(或其中的一部分......)展平到Viewmodel中,并将所述viewmodel传递给视图.如果我有一个DTO,这将很容易,但我从未见过它是用多个完成的.显然,有很多迂回的方法可以做到这一点(在automapper之外),但这是我想采取的方法,如果可能的话.
我有一个包含集合的域模型,我想使用AutoMapper将父节点和子节点映射到视图模型,但我不希望将被"软"删除的子节点移植.例如:
public class Customer {
public EntitySet<Order> {get;set;}
}
public class Order {
public DateTime? DeletedDate {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我的AutoMapper定义是
Mapper.CreateMap<Customer, CustomerViewModel>();
Mapper.CreateMap<Order, OrderViewModel>();
Run Code Online (Sandbox Code Playgroud)
我不希望Orders在视图模型中具有DeletedDate的值.
这可能在AutoMapper中吗?提前谢谢了,
史蒂夫.
我下面有两个类,映射必须是这样的
public class Module
{
public int Id { get; set; }
public string Name { get; set; }
public string ImageName { get; set; }
public virtual ICollection<Page> Pages { get; set; }
}
public class ModuleUI
{
public int Id { get; set; }
public string Text { get; set; }
public string ImagePath { get; set; }
public List<PageUI> PageUIs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如何使用Automapper执行此操作?
Id -> Id
Name -> Text
ImageName -> ImagePath
Pages -> …Run Code Online (Sandbox Code Playgroud) 有人可以解释我如何使用Automapper将DB int值映射到字符串,使用Enums作为集合.
我有以下内容
枚举
public enum Status { Open, Closed }
Run Code Online (Sandbox Code Playgroud)
EF 4.1域模型
public class MyEntity
{
...
public int StatusId { get; set; }
public virtual Status Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Dto正在网站上使用
public class MyEntityDto
{
public string Status { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当前的Automapper映射
Mapper.CreateMap<int, Status>().ConvertUsing<EnumConverter<Status>>();
Mapper.CreateMap<Enum, string>().ConvertUsing(src => src.ToString());
Mapper.CreateMap<MyEntity, MyEntityDto>()
.ForMember(d => d.Status, o => o.MapFrom(y => y.StatusId))
Run Code Online (Sandbox Code Playgroud)
第一行中的EnumConverter将int转换为状态良好而没有问题,但是如何将int或Status转换为DTO中的字符串?我失去任何帮助将不胜感激.
我知道这里需要2次转换,当从数据库中提取数据时枚举的id和enum需要填充然后枚举到字符串需要做
干杯
我只需要使用System.Type从AutoFixture创建一个对象.但是,似乎没有过载CreateAnonymous(),只需要一种类型.他们都期望编译时通用T.有没有办法将System.Type转换为T?
编辑使用细节:
我正在使用AutoMapper,它有一个用于注入组件的钩子,以支持复杂的映射场景:
void ConstructServicesUsing(System.Func<Type,object> constructor)
Run Code Online (Sandbox Code Playgroud)
从签名中可以看出,客户端可以注册FuncAutoMapper何时需要注入服务(主要是ValueResolver实现).
在生成版本中,此方法调用我的StructureMap容器来检索组件.但是,在单元测试我的映射代码时,我必须提供存根实现,否则AutoMapper会抛出异常.由于我使用AutoFixture + Moq作为我的自动锁定容器,因此让AF新建一个完全水合的存根似乎很自然,所以我可以集中精力编写单元测试代码.
我正在使用AutoMapper在DTO对象和业务对象之间进行映射.我有两个AutoMapperConfiguration.cs文件 - 一个在我的服务层,另一个在我的web api层.
如以下链接的答案所示, AutoMapper.CreateMaps的位置在哪里?
我在Global.asax类中调用这两个文件的Configure()
AutoMapperWebConfiguration.Configure();
AutoMapperServiceConfiguration.Configure();
Run Code Online (Sandbox Code Playgroud)
但似乎我的服务配置调用(第二次调用)正在覆盖web api层(第一次调用)的映射,我得到一个异常,说明Mapping缺失.
如果我将配置调用反转为这样
AutoMapperServiceConfiguration.Configure();
AutoMapperWebConfiguration.Configure();
Run Code Online (Sandbox Code Playgroud)
我没有得到web api映射的异常,但我得到了Service层的相同映射异常.
我做错了什么,因为这在上面的堆栈溢出链接中明确标记为答案?
这是我的代码:
public static class AutoMapperServiceConfiguration
{
public static void Configure()
{
Mapper.Initialize(x =>
{
x.AddProfile<CmciFlowTestToGenericFlowTestSimpleMappingProfile>();
x.AddProfile<FsrsFlowTestToGenericFlowTestSimpleMappingProfile>();
});
}
}
public class FsrsFlowTestToGenericFlowTestSimpleMappingProfile : Profile
{
protected override void Configure()
{
Mapper.CreateMap<FsrsFlowTest, GenericFlowTest>()
.ConvertUsing<FsrsFlowTestToGenericFlowTestSimpleConverter>();
}
}
public class FsrsFlowTestToGenericFlowTestSimpleConverter : TypeConverter<FsrsFlowTest, GenericFlowTest>
{
protected override GenericFlowTest ConvertCore(FsrsFlowTest source)
{
if (source == null)
{
return null;
}
return new GenericFlowTest
{
FlowTestDate = source.FlowTestDates, …Run Code Online (Sandbox Code Playgroud) 如何将源对象中的许多属性的值转换为目标对象中的单个类型?我可以在这种情况下使用Value Resolvers吗?或者可能有更好的解决方案?
Mapper.CreateMap<Source, Destination>()
.ForMember(dest => dest.Total,
opt => opt.ResolveUsing<CustomResolver>().FromMember(src => src.SubTotal));
Mapper.CreateMap<OtherSource, OtherDest>()
.ForMember(dest => dest.OtherTotal,
opt => opt.ResolveUsing<CustomResolver>().FromMember(src => src.OtherSubTotal));
public class CustomResolver : ValueResolver<decimal, decimal> {
// logic here
}
Run Code Online (Sandbox Code Playgroud)
我想将两个对象转换为一个(多对一转换).例如:
public class Document
{
public int CurrencyId {get; set;}
public int ExchangeRateId {get; set;}
}
public class DocumentDto
{
public Currency Currency {get; set;}
}
public class CurrencyDetails
{
public …Run Code Online (Sandbox Code Playgroud) public class Person
{
Name { get; set; }
IEnumerable<Address> Addresses { get; set; }
}
public class PersonModel
{
Name { get; set; }
IEnumerable<AddressModel> Addresses { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
如果我映射Person到PersonModel这样:
Mapper.DynamicMap<Person, PersonModel>(person);
Run Code Online (Sandbox Code Playgroud)
如果Addresses属性on Person为null,则它们将映射PersonModel为空Enumerable而不是null.
如何获得PersonModelnull Addresses而不是空Enumerable?
automapper ×10
c# ×8
.net ×4
asp.net ×3
asp.net-mvc ×2
autofixture ×1
automapper-2 ×1
c#-4.0 ×1
collections ×1
converter ×1
dto ×1
filter ×1
ignore ×1
mapping ×1
reflection ×1
skip ×1