C# GetType Equal';对于两个相同的类-c,s方法返回false#

C# GetType Equal';对于两个相同的类-c,s方法返回false#,c#,reflection,C#,Reflection,我有一个类,如:StoreDetail,它继承自BaseEntity,我在BaseEntity中添加了一个方法,将一个类复制到另一个类,如下所示: public abstract class BaseEntity { public void Copy(BaseEntity source, BaseEntity destination) { var destinationId = destination.Id; var so

我有一个类,如:
StoreDetail
,它继承自
BaseEntity
,我在
BaseEntity
中添加了一个方法,将一个类复制到另一个类,如下所示:

public abstract class BaseEntity
    {
 public void Copy(BaseEntity source, BaseEntity destination)
        {
            var destinationId = destination.Id;
            var sourceType = source.GetType();
            var destinationType = destination.GetType();
            if (sourceType.Equals(destinationType))
            {
                foreach (var field in sourceType.GetFields())
                {
                    var dstinationField = destinationType.GetField(field.Name);
                    if (dstinationField == null)
                        continue;
                    dstinationField.SetValue(destination, field.GetValue(source));
                }

                foreach (var field in sourceType.GetProperties())
                {
                    var dstinationField = destinationType.GetProperty(field.Name);
                    if (dstinationField == null)
                        continue;

                    dstinationField.SetValue(destination, field.GetValue(source, null), null);
                }
            }
            destination.Id = destinationId;
        }
  }
首先,我用此行检查两个对象的类型:

 var sourceType = source.GetType();
        var destinationType = destination.GetType();
        if (sourceType.Equals(destinationType)){}
但它返回False。 我是这样使用的:

StoreEntity.StoreDetail storeDetailModel = new StoreEntity.StoreDetail();
   storeDetail.Copy(storeDetail, storeDetailModel); //storeDetailselect from db
storeDetail
是:

var storeDetail = _storeDetails.Where(row => row.StoreId == transferViewModel.SourceStoreId).FirstOrDefault();

private IDbSet\u storeDetails

通常EntityFramework创建所谓的代理类。因此,从DB加载的实体的类型类似于
System.Data.entity.DynamicProxy.StoreEntity.StoreDetail\u somenumbers here
。 但是,代理将从基类派生,因此您可以

  • 检查DB中的实体是否可分配给您的类
  • 如果不使用延迟加载,请关闭代理生成(请参阅)
  • 使用预构建的工具进行复制(例如)
  • 如果只是因为不希望更改最终被持久化而进行复制(通常模型和DTO类是不同的),则
  • 使用更简单的ORM(例如)

通常EntityFramework创建所谓的代理类。因此,从DB加载的实体的类型类似于
System.Data.entity.DynamicProxy.StoreEntity.StoreDetail\u somenumbers here
。 但是,代理将从基类派生,因此您可以

  • 检查DB中的实体是否可分配给您的类
  • 如果不使用延迟加载,请关闭代理生成(请参阅)
  • 使用预构建的工具进行复制(例如)
  • 如果只是因为不希望更改最终被持久化而进行复制(通常模型和DTO类是不同的),则
  • 使用更简单的ORM(例如)

你能给我们看看
storeDetail
是什么样子吗?它是什么类型?如果调试,这两种类型是什么?什么是
sourceType.FullName
destinationType.FullName
?如果传递与源和目标相同的实例,equals会说什么?@Verarind
sourceType
是:
System.Data.Entity.DynamicProxies.StoreDetail_83E7CA59AED1C4EF399FE486F5F4035A5D3A2E18D1CF8CC8B86E81299EE15240
destinationType.FullName
是:
Store.DomainClasses.enties.StoreDetail
有这个问题。有代理类。我想@CaringDev给了你正确的答案。你能给我们看看
storeDetail
是什么样子吗?它是什么类型?如果调试,这两种类型是什么?什么是
sourceType.FullName
destinationType.FullName
?如果传递与源和目标相同的实例,equals会说什么?@Verarind
sourceType
是:
System.Data.Entity.DynamicProxies.StoreDetail_83E7CA59AED1C4EF399FE486F5F4035A5D3A2E18D1CF8CC8B86E81299EE15240
destinationType.FullName
是:
Store.DomainClasses.enties.StoreDetail
有这个问题。有代理类。我认为@CaringDev给了你正确的答案。