2017-10-11 51 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);'' –