确定给定属性是否为Navigation属性

时间:2018-11-27 06:42:30

标签: c# entity-framework

我正在编写代码以将某些属性从一个对象映射到另一个对象,但 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 对象。

2 个答案:

答案 0 :(得分:0)

感谢 Eric H

我认为this在比较属性值类型的情况下对我有用。在这里,我们正在检查属性值的类型是否为 Object

object valueOfProperty = ...
if(Convert.GetTypeCode(valueOfProperty) != TypeCode.Object){
   // Do something
}

答案 1 :(得分:0)

  

在实体框架中,表的列由非虚拟属性表示。虚拟属性表示表之间的关系(一对多,多对多,...)

您应该已经将属性Detail定义为虚拟属性。毕竟,它不是表中真正的“细节”项。

将所有关系属性声明为虚拟后,只需处理非虚拟属性即可。

请参见How to find out whether a property is virtual