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