我正在编写代码以将某些属性从一个对象映射到另一个对象,但 Navigational 属性除外。
我的代码如下:
var properties = typeof(TOne).GetProperties();
var t = new TOne();
foreach (var prop in properties)
{
var skip = exempt == null || (exempt != null && exempt.Contains(prop.Name));
if (!skip && CommonHelper.HasProperty(obj, prop.Name))
{
var _prop = obj.GetType().GetProperty(prop.Name);
CommonHelper.SetPropValue(t, prop.Name, _prop.GetValue(obj, null));
}
}
我想跳过所有导航属性(不希望复制对象,而希望复制原始类型)。
例如:
class Person {
public int Id { get; set; }
[ForeignKey("DetailId")]
public Detail Detail { get; set; }
public int DetailId { get; set; }
}
我希望复制 DetailId ,但不复制 Detail 对象。
答案 0 :(得分:0)
感谢 Eric H 。
我认为this在比较属性值类型的情况下对我有用。在这里,我们正在检查属性值的类型是否为 Object :
object valueOfProperty = ...
if(Convert.GetTypeCode(valueOfProperty) != TypeCode.Object){
// Do something
}
答案 1 :(得分:0)
在实体框架中,表的列由非虚拟属性表示。虚拟属性表示表之间的关系(一对多,多对多,...)
您应该已经将属性Detail
定义为虚拟属性。毕竟,它不是表中真正的“细节”项。
将所有关系属性声明为虚拟后,只需处理非虚拟属性即可。