0

コード行 Mapper.Map(Account, User); を実行すると、「タイプ マップ構成が見つからないか、マッピングがサポートされていません」という例外が発生します。Mapper.Map(Account); という行にも注意してください。例外をスローせず、期待される結果を返します。私がやろうとしているのは、User の新しいインスタンスを作成せずに、Account から User に値を移動することです。どんな助けでも素晴らしいでしょう。ありがとう!

public class AccountUpdate
{
    [Email]
    [Required]
    public string Email { get; set; }

    [Required]
    [StringLength(25, MinimumLength = 3, ErrorMessage = "Your name must be between 3 and 25 characters")]
    public string Name { get; set; }

    public string Roles { get; set; }
}

public class User
{
    public User()
    {
        Roles = new List<Role>();
    }
    public int UserId { get; set; }
    public string Email { get; set; }
    public string Name { get; set; }
    public byte[] Password { get; set; }
    public byte[] Salt { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime LastLogin { get; set; }
    public virtual ICollection<Role> Roles { get; set; }
}


Mapper.CreateMap<AccountUpdate, User>().ForMember(d => d.Roles, s => s.Ignore());
4

2 に答える 2

6

宛先クラスのすべてのメンバーをマップしていません。

Mapper.AssertConfigurationIsValid();問題の詳細については、電話でお問い合わせください:

Unmapped members were found. Review the types and members below.
Add a custom mapping expression, ignore, add a custom resolver, or modify the source/destination type
==============================================================
AccountUpdate -> User (Destination member list)
ConsoleApplication1.AccountUpdate -> ConsoleApplication1.User (Destination member list)
--------------------------------------------------------------
UserId
Password
Salt
CreatedOn
LastLogin

これを解決するには、マップされていないメンバーを明示的に無視します。


私はこれをテストしました:

Mapper.CreateMap<AccountUpdate, User>()
        .ForMember(d => d.Roles, s => s.Ignore())
        .ForMember(d => d.UserId, s => s.Ignore())
        .ForMember(d => d.Password, s => s.Ignore())
        .ForMember(d => d.Salt, s => s.Ignore())
        .ForMember(d => d.CreatedOn, s => s.Ignore())
        .ForMember(d => d.LastLogin, s => s.Ignore());

Mapper.AssertConfigurationIsValid();

var update = new AccountUpdate
{
    Email = "foo@bar.com",
    Name = "The name",
    Roles = "not important"
};

var user = Mapper.Map<AccountUpdate, User>(update);

Trace.Assert(user.Email == update.Email);
Trace.Assert(user.Name == update.Name);

これも機能します:

var user = new User();
Mapper.Map(update, user);

Trace.Assert(user.Email == update.Email);
Trace.Assert(user.Name == update.Name);
于 2013-02-14T15:39:33.363 に答える