如何在使用AutoMapper时检索实体

时间:2012-10-09 13:46:55

标签: asp.net asp.net-mvc asp.net-mvc-3 automapper automapper-2

我使用AutoMapper在Asp.net中使用MVC。

从这段代码中可以看出

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

我正在尝试将地图EventEditViewModel转换为Event。

我需要使用我的服务层将CandidateId转换为实际的实体。

是否有可能在AutoMapper中执行此操作?如何设置

公共类Event()     {          公共班候选人{get;组;}     }

public class EventEditViewModel()
{
    public string CandidateId {get; set;}
}

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

Mapper.CreateMap<EventEditViewModel, Event>();

使用之前。

答案 2 :(得分:1)

有时这可能很有用,但我尝试仅在我的服务层使用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;
        }
    }
}