Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 如何知道DbEntityEntry中存储的属性是否为属性`?_C#_Entity Framework_Entity Framework 6 - Fatal编程技术网

C# 如何知道DbEntityEntry中存储的属性是否为属性`?

C# 如何知道DbEntityEntry中存储的属性是否为属性`?,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,在DbEntityEntry中的实体框架6中,可以通过调用属性来检索某些信息。 但是,当属性不是属性而是集合或引用时,如果出现ArgumentException,则此操作将失败。而不是必须使用其他功能 我如何知道调用哪个函数?也就是说,我如何知道该属性是什么类型(简单属性、复杂属性、引用、集合) 有关DbEntityEntry,请参阅 我正在Visual Studio 2013中使用Entity Framework 6.1.3。我找到了如何获取导航属性是否为集合类型的方法。 为此,我们需要获取属

DbEntityEntry
中的实体框架6中,可以通过调用
属性来检索某些信息。
但是,当属性不是属性而是集合或引用时,如果出现
ArgumentException
,则此操作将失败。而不是必须使用其他功能

我如何知道调用哪个函数?也就是说,我如何知道该属性是什么类型(简单属性、复杂属性、引用、集合)

有关DbEntityEntry,请参阅


我正在Visual Studio 2013中使用Entity Framework 6.1.3。

我找到了如何获取导航属性是否为集合类型的方法。 为此,我们需要获取属性的
builtypekind

我使用此代码获取实体的所有导航属性:

var entitySetElementType = ((IObjectContextAdapter)context).ObjectContext.CreateObjectSet<TEntity>().EntitySet.ElementType;
var navProperties = entitySetElementType.NavigationProperties;
更新


由于EF已移动到一个单独的程序集和命名空间,因此上述代码中的
System.Data.Metadata.Edm.builtypekind.CollectionKind
应更改为
System.Data.Entity.Core.Metadata.Edm.builtypekind.CollectionKind

,其中一个步骤是挖掘这些动态代理。我这样做是因为:

    if ( targetType.BaseType != null
        && targetType.Namespace == "System.Data.Entity.DynamicProxies" )
    {
        targetType = targetType.BaseType;
    }
不是很干净,但是很好

更新

根据jjj的回答,我想出了以下方法:

        private bool IsSimpleProperty( string propertyName, DbEntityEntry entry )
        {
            DbMemberEntry memberEntry = entry.Member( propertyName );

            return memberEntry is DbPropertyEntry;
        }

通过改变is表达式,您可以检查所有类型。

返回一个
DbMemberEntry
,您可以使用
(memberEntry是DbPropertyEntry)
检查该类型。

您的问题解决了吗?我有完全相同的条件。我前进了一步,但还没有完全进步。我将在今天晚些时候发布(代码目前不可用)我还需要找到导航属性是否为集合类型。我把它作为答案贴了出来。请告诉我你的路。
        private bool IsSimpleProperty( string propertyName, DbEntityEntry entry )
        {
            DbMemberEntry memberEntry = entry.Member( propertyName );

            return memberEntry is DbPropertyEntry;
        }