C# 无法从自动映射中排除属性

C# 无法从自动映射中排除属性,c#,asp.net,.net,automapper,C#,Asp.net,.net,Automapper,我的asp.net控制台应用程序中包含以下代码:- Contact contact = new Contact() { Salutation = fields[SalutationIndex], FirstName = fields[FirstNameIndex], LastName = fields[LastNameIndex], Organization = fields[OrganizationIndex],

我的asp.net控制台应用程序中包含以下代码:-

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;
联系人=新联系人()
{
称呼=字段[称呼索引],
FirstName=字段[FirstNameIndex],
LastName=字段[LastNameIndex],
组织=字段[组织索引],
Title=字段[TitleIndex]};
var dbcontact=entities.Contacts.FirstOrDefault(a=>a.Email.ToLower()==contact.Email.ToLower());
CreateMap().ForSourceMember(x=>x.ID,opt=>opt.Ignore());
dbcontact=Mapper.Map(contact);
entities.Entry(dbcontact).State=EntityState.Modified;
现在,我想将所有属性从
联系人
复制到
数据库联系人
,但要排除ID,因为在
联系人
中,ID将具有defualt值=
0
,而我希望
ID
保留从数据库检索到的ID。 但是上面的代码将修改
dbcontact
属性,包括
ID
,使其与
contact
中的属性相同。。因此,试图忽略
ID
似乎不起作用。 我使用的是auto mapper 3.3.0+控制台应用程序,使用的是asp.net 4.5+实体框架5.0
关于

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

Mapper.CreateMap<Contact, Contact>().ForMember(x => x.ID, opt => opt.Ignore());
Mapper.Map<Contact, Contact>(contact, dbcontact);
Mapper.CreateMap().ForMember(x=>x.ID,opt=>opt.Ignore());
Map(contact,dbcontact);
看看这个方法的总结

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

编辑:

将这两行(来自您的示例)替换为答案中的两行:

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

您是否尝试了
FormMember
而不是
for SourceMember
?@DiskJunky遇到了同样的问题。。原因可能是我需要在
联系人中显式定义ID
您在调用之前是否调用
Mapper.CreateMap
,例如,在调用之前在其他位置设置绑定?@DiskJunky您认为这可能是问题吗?我不认为so@DiskJunky那么你的意思是将它移动到第一条语句中?那么你的意思是不需要这样做
dbcontact=Mapper.Map(contact)??
dbcontact=Mapper.Map(contact)
因此我认为这会创建一个新对象,并将
ID
设置为默认值。因此,您指的是您提到的两行代码,不需要
dbcontact=Mapper.Map(contact)?更新我的答案