EF枚举所有被忽略的属性

时间:2017-01-19 09:37:53

标签: c# entity-framework entity-framework-6

我想获取给定实体的所有被忽略属性的名称。映射是通过流畅的API完成的,因此我不能简单地检查属性。

我听说我必须以某种方式查询ObjectContext,但是,我在这个主题上找不到任何好的互联网资源。

var workspace = ((IObjectContextAdapter) dbContext).ObjectContext.MetadataWorkspace;

var entityType = typeof(MyEntity);

IEnumerable<PropertyInfo> ignoredProperties = workspace.??? // What here?

如何获取所有被忽略属性的列表?

附加说明:我无法更改DbContext,因此我无法使用Get ignored properties in Entity Framework中发布的解决方案

1 个答案:

答案 0 :(得分:1)

在DbContext类中创建静态线程安全集合会更容易,并在忽略映射中的某些属性时填充它。

向mapper类添加方法:

1 1 0 0 1 0 0

添加课程

    public EntityTypeConfiguration<TEntityType> IgnoreAndReport<TEntityType, TProperty>(Expression<Func<TEntityType, TProperty>> propertyExpression)
    {
        this.Ignore(propertyExpression);

        LambdaExpression lambda = propertyExpression as LambdaExpression;
        MemberExpression memberExpr = null;

        if (lambda.Body.NodeType == ExpressionType.Convert)
            memberExpr = ((UnaryExpression) lambda.Body).Operand as MemberExpression;
        else if (lambda.Body.NodeType == ExpressionType.MemberAccess)
            memberExpr = lambda.Body as MemberExpression;

        EntityMapData.IgnoredProperties.Add(new Tuple<Type, string>(typeof(TEntityType), memberExpr.Member.Name));

    }

替换mapper中的代码(假设您可以更改它): public static class EntityMapData { public static ConcurrentBag<Tuple<Type, string>> IgnoredProperties { get; set; } = new ConcurrentBag<Tuple<Type, string>>(); } Ignore(m => m.SomeProperty)

我没有运行代码,但应该可以运行。