【问题标题】:EF enumerate all ignored propertiesEF枚举所有被忽略的属性
【发布时间】:2017-06-03 22:45:21
【问题描述】:

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

我听说我必须以某种方式查询 ObjectContext,但是,我找不到任何关于此主题的好的 Internet 资源。

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

var entityType = typeof(MyEntity);

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    向映射器类添加方法:

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

    添加类

    public static class EntityMapData
    {
        public static ConcurrentBag<Tuple<Type, string>> IgnoredProperties { get; set; } = new ConcurrentBag<Tuple<Type, string>>();
    }
    

    替换映射器中的代码(假设您可以更改): Ignore(m =&gt; m.SomeProperty)IgnoreAndReport(m =&gt; m.SomeProperty);

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

    【讨论】:

    • 如上所述,我无法更改 DbContext,因此无法使用 DbModelBuilder 方法 -> 我还链接了您所做的同一篇文章 :-)
    • 对不起...但是您可以创建一些其他静态类来保存您忽略的属性列表,您不需要修改 DbContext。
    • 抱歉,您付出了这么多努力,但谁会调用 IgnoreAndReport()?这是否意味着我仍然必须摆弄流利映射发生的原始 DbContext ? :(
    • 不应该也有办法通过 ObjectContext 吗?
    • 我提出的解决方案对你不起作用。你读过这个吗:romiller.com/2014/04/08/ef6-1-mapping-between-types-tables我想经过一些调试你可以找到一些信息,你可以将你的类与映射的信息进行比较,你可以做一个差异。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 2018-12-11
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    相关资源
    最近更新 更多