c# - 使用 PropertyInfo 忽略属性

标签 c# entity-framework

我想忽略具有以下属性信息的属性;

PropertyInfo propertyInfo = typeof(GLAccount).GetProperty("ExampleProp");
modelBuilder.Entity<GLAccount>().Ignore(g => propertyInfo);

上面的代码块给了我以下错误;

The expression 'g => value(Dashboard.DAL.Context+<>c__DisplayClass16_0).propertyInfo' is not a valid property expression. The expression should represent a property: C#: 't => t.MyProperty'  VB.Net: 'Function(t) t.MyProperty'.'

我该如何解决这个问题?谢谢。

最佳答案

如果您使用的 API 需要表达式树,则需要手动构建 lambda:

var p = Expression.Parameter(typeof(GLAccount));
var body = Expression.Property(p, propertyInfo);
var lambda = Expression.Lambda<Func<GLAccount, SomeType>>(body, p);
modelBuilder.Entity<GLAccount>().Ignore(lambda);

不过,这里的问题是要知道 SomeType 。我假设Ignore(...)实际上是Ignore<TResult>(...)或类似的,其中 TResult需要与 SomeType 相同上面,这需要是 ExampleProp 的返回类型是。您可能需要使用MakeGenericMethod在这里。

另请注意,如果您没有使用 propertyInfo 执行任何其他操作 ,您还可以使用Expression.Property(p, "ExampleProp")作为捷径。

虽然... from these docs ,您也许可以简单地使用:

modelBuilder.Entity<GLAccount>().Ignore("ExampleProp");

关于c# - 使用 PropertyInfo 忽略属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59030906/

相关文章:

c# - 分割UDP数据包

c# - 卡在异步方法

c# - 从 ListBox 中选择多个项目导致 Collection 被修改;枚举操作可能无法执行

c# - 找不到 CreateQuery() 方法

c# - 如何停止应用程序?

c# - 如何更改现有 TPL block 的 MaxDegreeOfParallelism?

c# - 插入链接表而不先获取

java - 实体重复

c# - 如何从 Entity Framework Core 中的 DbContext 获取列名和相应的数据库类型

c# - EntityFramework.Extended Future 错误(JIT 编译器内部限制)