Asp.net 如何在使用AutoMapper时检索实体

Asp.net 如何在使用AutoMapper时检索实体,asp.net,asp.net-mvc,asp.net-mvc-3,automapper,automapper-2,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Automapper,Automapper 2,我在Asp.net中使用MVC 正如您可以从这段代码中看到的 Event eventObj = Mapper.Map<EventEditViewModel, Event>(eventEditViewModel); 我认为您需要先创建地图,如中所示: Mapper.CreateMap<EventEditViewModel, Event>(); 在使用之前。我认为您需要先创建一个地图,如中所示: Mapper.CreateMap<EventEditViewMode

我在Asp.net中使用MVC

正如您可以从这段代码中看到的

 Event eventObj = Mapper.Map<EventEditViewModel, Event>(eventEditViewModel);

我认为您需要先创建地图,如中所示:

Mapper.CreateMap<EventEditViewModel, Event>();

在使用之前。

我认为您需要先创建一个地图,如中所示:

Mapper.CreateMap<EventEditViewModel, Event>();

在使用它之前。

您应该避免使用AutoMapper从服务层检索实体。理想情况下,它应该用于直接映射给定类型的属性。

您应该避免使用AutoMapper从服务层检索实体。理想情况下,它应该用于在给定类型的属性之间直接映射。

有时这可能很有用,但是我尝试在我的服务层中仅使用Automapper,即服务的所有输入和输出都是特殊的输入和输出模型:

Mapper.CreateMap<int, Entity>().ConvertUsing( new RepoTypeConverter<Entity>() );

public class NullableRepoTypeConverter<T> : ITypeConverter<int, T>
{
    public T Convert( ResolutionContext context )
    {
        int? src = (int?)context.SourceValue;
        if (src != null && src.HasValue) {
            return Repository.Load<T>( src.Value );
        } else {
            return default(T);
        }
    }

    // Get Repository somehow (like injection)
    private IRepository repository;
    public IRepository Repository
    {
        get
        {
            if (repository == null) {
                repository = KernelContainer.Kernel.Get<IRepository>();
            }
            return repository;
        }
    }
}

有时这可能很有用,但我尝试在我的服务层中仅使用Automapper,即服务的所有输入和输出都是特殊的输入和输出模型:

Mapper.CreateMap<int, Entity>().ConvertUsing( new RepoTypeConverter<Entity>() );

public class NullableRepoTypeConverter<T> : ITypeConverter<int, T>
{
    public T Convert( ResolutionContext context )
    {
        int? src = (int?)context.SourceValue;
        if (src != null && src.HasValue) {
            return Repository.Load<T>( src.Value );
        } else {
            return default(T);
        }
    }

    // Get Repository somehow (like injection)
    private IRepository repository;
    public IRepository Repository
    {
        get
        {
            if (repository == null) {
                repository = KernelContainer.Kernel.Get<IRepository>();
            }
            return repository;
        }
    }
}

谢谢Peter,映射器已配置:-@GibboK很好,没问题-你想接受这个答案吗:-谢谢Peter,映射器已配置:-@GibboK很好,没问题-你想接受这个答案吗:-我大体上同意,但是,为什么不?感觉不太对,但有时需要从DTO到实体,因此需要从数据库加载一些内容。有没有更好的办法。我大体上同意,但为什么不呢?感觉不太对,但有时需要从DTO到实体,因此需要从数据库加载一些内容。有没有更好的办法。