Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在实体上调用GetProperties时,如何排除外部实体?_C#_Entity Framework_.net 3.5 - Fatal编程技术网

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);