【发布时间】:2015-02-09 14:58:52
【问题描述】:
有没有办法区分实体框架类(数据库优先)上的常规集合属性和导航属性?
我目前正在检查对象 is ICollection 和 IsVirtual 是否存在,但我认为这可能会在某人已声明为虚拟集合的常规属性上触发。
问题:还有其他方法可以区分导航属性与其他属性吗?
上下文:我使用它来比较任何对象的值,但我希望它忽略导航属性(以忽略循环引用等)。
foreach (var item in (IEnumerable)obj)
{
list2.MoveNext();
var item2 = list2.Current;
foreach (PropertyInfo propInfo in item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
Object v1 = propInfo.GetValue(item);
Object v2 = propInfo.GetValue(item2);
Primitive = (v1 == null && v2 == null) || IsPrimitive(v1.GetType());
if (Primitive)
{
Assert.AreEqual(v1, v2);
}
else
{
// Ignore Navigation Properties
// Currently assuming Virtual properties to be Navigation...
if (propInfo.GetGetMethod().IsVirtual) continue;
CompareObjects(v1, v2);
}
}
}
【问题讨论】:
-
"" is ICollection. -
我不明白你想说什么?
-
您对虚拟字符串属性的检查将失败。
-
哦,不知道。另一个原因是我需要更多地了解导航属性,以便更好地将它们与常规属性区分开来。
标签: c# entity-framework reflection