C# AutoMapper不会将源映射到目标

C# AutoMapper不会将源映射到目标,c#,.net,automapper,C#,.net,Automapper,我不知道为什么,在某个点上AutoMapper没有将源映射到目标对象 var result = Mapper.Map<User, User>(userToImport, userToUpdate); var areEquals = result == userToUpdate; //FALSE !!! Why? var areEquals2 = result.Equals(userToUpdate); //FALSE !!! Why? userToUpdate不会

我不知道为什么,在某个点上AutoMapper没有将源映射到目标对象

   var result = Mapper.Map<User, User>(userToImport, userToUpdate);
   var areEquals = result == userToUpdate; //FALSE !!! Why?
   var areEquals2 = result.Equals(userToUpdate); //FALSE !!! Why?
userToUpdate不会使用userToImport中的新值进行更新。结果是映射的正确结果对象。但是result和userToUpdate是不同的对象


主要问题是,为什么userToUpdate没有更新?

您必须先创建一个映射,否则它不会更新并返回目标参数的对象

 Mapper.CreateMap<User, User>();

您需要这样做:

public class User
{
    public int Property1 { get; set; }
    public int Property2 { get; set; }

    public override bool Equals(object obj)
    {
        if (!(obj is User))
            return false;
        else
        {
            Usero = obj as User;
            return o.Property1 == this.Property1 && o.Property2 == this.Property2;
        }

    }
}

之后,您可以执行obj1.Equalsobj2

==和Equals是如何实现的?如果不创建map first Mapper.CreateMap;目标对象将不会被源对象的值填充,但返回的对象将被填充。另外,您正在比较两个不同的引用,在本例中,这将返回false。您需要重写运算符==或Equals函数,并使用this.prop1==obj执行比较逻辑。prop1@leskovarMap返回与目标参数中指定的引用相同的引用。因此,如果存在映射,则与Equals或==进行比较将得到true,请参见我的答案。不需要重写,问题在于缺少CreateMap。@Alex是的,我确实没有调用CreateMap。这就是我有这种行为的原因。这对我来说很奇怪,这与此无关。Mapsource,destination返回目标对象。这实际上是真的。我有点惊讶,当映射没有创建时,AM没有抛出异常。我想你是对的。因为它在过去对我有用。我会检查一下,稍后再给你回复。谢谢