2011-03-07 3 views
0

idをAutoMapperでオブジェクトにマップしようとしていますが、私はこれを2日間把握しようとしています。どんな助けもありがとう。ここでnull可能なエンティティをマップする

は私のドメインオブジェクトである:ここで

public class Entity 
{ 
    public virtual Guid Id { get; protected set; } 
} 

public class Customer : Entity 
{ 
    public virtual User SalesPerson { get; set; } 
} 

public class User : Entity 
{ 
    public virtual string Email { get; set; } 
} 

は、私が使用している編集モデルです。営業担当者は、営業担当者がいない可能性があるため、「なし」オプション(value="")のユーザーのドロップダウンリストです。

public class CustomerEditModel 
{ 
    [DisplayName("Sales Person")] 
    public Guid? SalesPerson { get; set; } 
} 

ここで私は立ち往生しています。

cfg.CreateMap<CustomerEditModel, Customer>() 
    .ForMember(d => d.SalesPerson, o => o.ResolveUsing<EntityResolver<User>>().FromMember(s => s.SalesPerson)); 

cfg.CreateMap<CustomerEditModel, Customer>() 
    .ForMember(d => d.SalesPerson, o => o.MapFrom(s => s.SalesPerson.HasValue ? s.SalesPerson.Value : null); 

cfg.CreateMap<CustomerEditModel, Customer>() 
    .ForMember(d => d.SalesPerson, o => o.MapFrom(s => s.SalesPerson != null ? s.SalesPerson : null)); 

public class EntityResolver<T> : ValueResolver<Guid, T> 
    where T : Entity 
{ 
    protected override T ResolveCore(Guid source) 
    { 
     return session.Get<T>(source, LockMode.None); 
    } 
} 

答えて

0

私は次の変更を行い、期待通りに物事が動作しているように表示されます。これらは、私は戻ってドメインモデルに編集モデルをマッピングするために、これまでにしようとしているマッピングされています。あなたはまた、同様にそのための型コンバータを使用することができ

public class EntityResolver<id, entity> : ValueResolver<id, entity> 
    where entity : Entity 
{ 
    protected override entity ResolveCore(id source) 
    { 
     if (source != null) 
      return session.Get<entity>(source, LockMode.None); 
     else 
      return null; 
    } 
} 

...

cfg.CreateMap<CustomerEditModel, Customer>() 
    .ForMember(d => d.SalesPerson, o => o.ResolveUsing<EntityResolver<Guid?, User>>().FromMember(s => s.SalesPerson)); 
+0

: Mapper.CreateMap .ConvertUsing >(); ここで、EntityConverterはITypeConverterであり、上記とほとんど同じです。 –

関連する問題