C# 在实体上调用GetProperties时,如何排除外部实体?
上面返回的C# 在实体上调用GetProperties时,如何排除外部实体?,c#,entity-framework,.net-3.5,C#,Entity Framework,.net 3.5,上面返回的Car和CarReference是属性的一部分,但这些是Person的外来实体。我想将它们从GetProperties中排除。如何实现这一点?EntityFrameworkPOCO的设计很难确定什么是关联。这是因为所有信息都在实体框架中,而这些信息都不在POCO中(有点像POCO)。你必须进入EF的EDM课程 你可以访问EDM我想。。。通过 var properties = person.GetType().GetProperties(BindingFlags.DeclaredOnly
Car
和CarReference
是属性的一部分,但这些是Person
的外来实体。我想将它们从GetProperties
中排除。如何实现这一点?EntityFramework
POCO
的设计很难确定什么是关联。这是因为所有信息都在实体框架
中,而这些信息都不在POCO
中(有点像POCO)。你必须进入EF的EDM课程
你可以访问EDM我想。。。通过
var properties = person.GetType().GetProperties(BindingFlags.DeclaredOnly |
BindingFlags.Public |
BindingFlags.Instance);
但这是我能为你做的最好的…好吧,一个简单的解决方案,但它可能足以满足你的需要
仅排除类别属性(这将排除单个导航属性)和泛型类型属性(这将排除集合属性,例如
Car
中的ICollection
)
“外来实体”是什么意思?你能举个例子吗?@Romoku-在我的数据库中,Car有一个指向Person的外来密钥,所以当我创建模型时,它会创建一个CarReference。你在这里混合了反射和实体框架的特定属性。如果您只想通过使用反射来解决这个问题,您可以检查属性的
PropertyType
,并自己实现一些约定。@MikaelÖstberg-对于外部实体,什么是PropertyType?因为您在那里控制着,这取决于您。也许这些实体共享一个共同的基类?如果没有,可能它们共享名称空间?如果我需要排除属性,我可能需要将它们添加到某个排除列表或添加到where子句中,对吗?“只排除属于类的属性”这将排除任何字符串属性,而不仅仅是导航属性!!
var objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
var metadata = objectContext.MetadataWorkspace;
var properties = typeof(Items).GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance)
.Where(m => !m.PropertyType.IsClass &&
!m.PropertyType.IsGenericType);