0

私はオートマッパーを初めて使用し、問題を抱えています。この場合、オートマッパーを使用して、モデル (EntityFramework 生成) を自分のビューモデルにマップします。値を持つ sourcemodel は destinationmodel にマップされますが、dest 値は常に null です。値に何が起こっているのですか?

オートマッパーをプロジェクトに参照し、マッピングをブートストラップしました。

public static void RegisterAutoMapperMappings()
        {
            Mapper.Initialize(x =>
            {
                // Add the mappingprofiles you configured below
                x.AddProfile(new RegistrationViewModelProfile());
            });
        }

    public static IMappingExpression<TSource, TDest> IgnoreAllUnmapped<TSource, TDest>(this IMappingExpression<TSource, TDest> expression)
    {
        expression.ForAllMembers(opt => opt.Ignore());
        return expression;
    }

    public class RegistrationViewModelProfile : Profile
    {
        protected override void Configure()
        {
            CreateMap<RegistrationViewModel, contact>().IgnoreAllUnmapped();
            CreateMap<contact, RegistrationViewModel>().IgnoreAllUnmapped();

            CreateMap<RegistrationViewModel, emailaddress>().IgnoreAllUnmapped();
            CreateMap<emailaddress, RegistrationViewModel>().IgnoreAllUnmapped();

            CreateMap<RegistrationViewModel, password>().IgnoreAllUnmapped();
            CreateMap<password, RegistrationViewModel>().IgnoreAllUnmapped();

            //Always check if mapping is valid
            Mapper.AssertConfigurationIsValid();
        }
    }

私のビューモデル:

public class RegistrationViewModel
    {
        public HttpPostedFileBase file { get; set; }
        public String EmailAddress { get; set; }
        public String Password { get; set; }
        public string contact_givenname { get; set; }
        public string contact_surname_prefix { get; set; }
        public string contact_surname { get; set; }
        public string contact_gender { get; set; }
        public string contact_country { get; set; }
        public string contact_residence { get; set; }
        public Nullable<DateTime> contact_birth_date{ get; set; }
        public DateTime create_date { get; set; }
        public ICollection<int> Contact_roles { get; set; }
        public string Emailaddress_verificationkey { get; set; }
    }

私のモデル:

public partial class contact
    {
        public contact()
        {
            this.contact_connection_rel = new HashSet<contact_connection_rel>();
            this.contact_emailaddress_password_rel = new HashSet<contact_emailaddress_password_rel>();
            this.contact_emailaddress_rel = new HashSet<contact_emailaddress_rel>();
            this.contact_service_role_rel = new HashSet<contact_service_role_rel>();
            this.given_answer = new HashSet<given_answer>();
            this.given_answer1 = new HashSet<given_answer>();
        }

        public int contact_id { get; set; }
        public string contact_initials { get; set; }
        public string contact_givenname { get; set; }
        public string contact_surname_prefix { get; set; }
        public string contact_surname { get; set; }
        public string contact_nickname { get; set; }
        public string contact_gender { get; set; }
        public Nullable<System.DateTime> contact_birth_date { get; set; }
        public string contact_country { get; set; }
        public string contact_residence { get; set; }
        public string contact_ssn { get; set; }
        public Nullable<System.DateTime> create_date { get; set; }
        public Nullable<System.DateTime> modify_date { get; set; }
        public Nullable<System.DateTime> delete_date { get; set; }

        public virtual ICollection<contact_connection_rel> contact_connection_rel { get; set; }
        public virtual ICollection<contact_emailaddress_password_rel> contact_emailaddress_password_rel { get; set; }
        public virtual ICollection<contact_emailaddress_rel> contact_emailaddress_rel { get; set; }
        public virtual ICollection<contact_service_role_rel> contact_service_role_rel { get; set; }
        public virtual ICollection<given_answer> given_answer { get; set; }
        public virtual ICollection<given_answer> given_answer1 { get; set; }
    }

構成をテストするには、次の行を使用します。vars には宛先オブジェクトが含まれていますが、常に null です。

contact c = new contact();
contact testC = unitOfWork.ContactRepository.Find(82);

var x = Mapper.Map<contact, RegistrationViewModel>(testC);
var y = Mapper.Map(regModel, c, typeof(RegistrationViewModel), typeof(contact));
var b = Mapper.DynamicMap<RegistrationViewModel, contact>(regModel);
var z = Mapper.Map<RegistrationViewModel, contact>(regModel, c);
var w = Mapper.Map<RegistrationViewModel, contact>(regModel);
4

1 に答える 1

1
expression.ForAllMembers(opt => opt.Ignore());

AutoMapper にすべてのプロパティを無視するように指示しているため、何もマップされません。

一致しないプロパティを無視したいだけの場合は、この回答を参照してください。それ以外の場合は、オブジェクト間で各プロパティを明示的にマップする必要があります。

于 2013-08-08T16:36:02.463 に答える