gpt4 book ai didi

c# - EF 枚举所有被忽略的属性

转载 作者:太空宇宙 更新时间:2023-11-03 12:33:50 26 4
gpt4 key购买 nike

我想获取给定实体的所有忽略属性的名称。映射是通过流畅的 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 中发布的解决方案

最佳答案

在您的 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 => m.SomeProperty)IgnoreAndReport(m => m.SomeProperty);

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

关于c# - EF 枚举所有被忽略的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41738336/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com