标签: automapper

在IQueryable上调用ProjectTo <T>()时,AutoMapper抛出StackOverflowException

我使用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)

c# stack-overflow entity-framework automapper ef-code-first

19
推荐指数
2
解决办法
1万
查看次数

什么是Automapper?

什么是Automapper

它对我的域和控制器层(asp.net mvc)有什么帮助?

.net asp.net asp.net-mvc automapper

18
推荐指数
1
解决办法
1875
查看次数

是否可以使用Automapper将多个DTO对象映射到单个ViewModel?

我想知道是否可以使用Automapper将多个DTO对象映射到单个ViewModel对象?

本质上,我有多个DTO对象,并希望在ASP.NET MVC 2.0中的单个屏幕上显示每个对象的信息.为此,我想将DTO对象(或其中的一部分......)展平到Viewmodel中,并将所述viewmodel传递给视图.如果我有一个DTO,这将很容易,但我从未见过它是用多个完成的.显然,有很多迂回的方法可以做到这一点(在automapper之外),但这是我想采取的方法,如果可能的话.

.net c# asp.net asp.net-mvc automapper

18
推荐指数
3
解决办法
8974
查看次数

使用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中吗?提前谢谢了,

史蒂夫.

collections ignore skip filter automapper

18
推荐指数
1
解决办法
5763
查看次数

具有嵌套子列表的自动映射器

我下面有两个类,映射必须是这样的

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)

.net c# automapper c#-4.0 automapper-2

18
推荐指数
1
解决办法
2万
查看次数

如何使用来自DB的automapper和int将int转换为枚举和字符串

有人可以解释我如何使用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需要填充然后枚举到字符串需要做

干杯

c# entity-framework automapper

18
推荐指数
1
解决办法
2万
查看次数

AutoFixture:如何从System.Type创建CreateAnonymous

我只需要使用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新建一个完全水合的存根似乎很自然,所以我可以集中精力编写单元测试代码.

c# reflection automapper autofixture

18
推荐指数
1
解决办法
2093
查看次数

Global.asax中的多个AutoMapper.Configure()

我正在使用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)

c# asp.net automapper asp.net-web-api

18
推荐指数
3
解决办法
2万
查看次数

Automapper自定义多对一转换

Automapper Many To One转换

如何将源对象中的许多属性的值转换为目标对象中的单个类型?我可以在这种情况下使用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)

c# mapping converter dto automapper

18
推荐指数
2
解决办法
2085
查看次数

Automapper返回一个空集合,我想要一个null

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)

如果我映射PersonPersonModel这样:

Mapper.DynamicMap<Person, PersonModel>(person);
Run Code Online (Sandbox Code Playgroud)

如果Addresses属性on Person为null,则它们将映射PersonModel为空Enumerable而不是null.

如何获得PersonModelnull Addresses而不是空Enumerable

.net c# automapper

18
推荐指数
3
解决办法
6656
查看次数