Billpeng Space

技术源自生活
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

从数据库中读取的实体,有导航属性的话,该属性通过GetCustomAttributes无法判断特性是否存在(如:ForeignKey)

获取到的GetCustomAttributes.Length为零

如果要判断,请用Attribute.IsDefine

原因可能是:

EF的导航属性延时加载(LazyLoad)以后,属性的类型被EF重写了,类型从:ActivityIntroduction变为了DynamicProxies

 名称类型
DeclaringType {Name = "ActivityIntroduction_B088226646DE0E9842FB0E0C98C7DB6E2AE98BCC9D08ECE04124FD7E9322897C" FullName = "System.Data.Entity.DynamicProxies.ActivityIntroduction_B088226646DE0E9842FB0E0C98C7DB6E2AE98BCC9D08ECE04124FD7E9322897C"} System.Type {System.RuntimeType}

可以通过BaseType到基类

var type = entity.GetType();
//如果是ef的类型则取它的基类
type = type.Namespace == "System.Data.Entity.DynamicProxies" ? type.BaseType: type;