我想获取给定实体的所有被忽略属性的名称。映射是通过流畅的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中发布的解决方案
答案 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)
我没有运行代码,但应该可以运行。