2017-10-11 17 views
1
排除属性

我有我的asp.net控制台应用程序中下面的代码: -无法从AutoMapper

Contact contact = new Contact() 
    { 
     Salutation = fields[SalutationIndex], 
     FirstName = fields[FirstNameIndex], 
     LastName = fields[LastNameIndex], 
     Organization = fields[OrganizationIndex], 
     Title = fields[TitleIndex]}; 

     var dbcontact = entities.Contacts.FirstOrDefault(a => a.Email.ToLower() == contact.Email.ToLower()); 
     Mapper.CreateMap<Contact, Contact>().ForSourceMember(x => x.ID, opt => opt.Ignore()); 
     dbcontact = Mapper.Map<Contact>(contact); 
     entities.Entry(dbcontact).State = EntityState.Modified; 

现在我想从contact所有属性复制到dbcontact,但排除该ID,因为在contact里面,ID将具有默认值= 0,而我想要ID保持从数据库中检索到的那个。 但上面的代码将修改dbcontact属性,包括ID等于contact内的那些..所以似乎试图忽略ID没有工作。 我使用自动映射器3.3.0 +控制台应用程序正在使用asp.net 4.5 +实体框架5.0 关注

+0

你试过'ForMember',而不是'ForSourceMember':

与那些从答案替换此2号线(从你的例子)? – DiskJunky

+0

@DiskJunky同样的问题..可能的原因是,我需要明确定义'contact'中的ID –

+0

在这个调用之前你是否调用了'Mapper.CreateMap ',例如,在这之前设置了别处的绑定叫什么名字? – DiskJunky

回答

1

我认为你使用的是错误的方法。试试这个:

Mapper.CreateMap<Contact, Contact>().ForMember(x => x.ID, opt => opt.Ignore()); 
Mapper.Map<Contact, Contact>(contact, dbcontact); 

看看这个方法的总结。

执行从源对象到现有目标对象的映射。

编辑:

Mapper.CreateMap<Contact, Contact>().ForSourceMember(x => x.ID, opt => opt.Ignore()); 
dbcontact = Mapper.Map<Contact>(contact); 
+0

所以你的意思是不需要做这个'dbcontact = Mapper.Map (contact);'' –

+1

'dbcontact = Mapper.Map (contact);'所以我认为这会创建一个新对象并将ID设置为默认值。 – PinBack

+0

所以你的意思是你提到的2行代码,不需要'dbcontact = Mapper.Map (contact);'' –