代码之家  ›  专栏  ›  技术社区  ›  Mark Rogers

在创建编译器生成的显示类的方法中,如何避免Linq表达式的映射错误?

  •  0
  • Mark Rogers  · 技术社区  · 12 年前

    当我将Linq表达式放入由实体框架的代码优先方法映射的域类方法中时,它会导致创建编译器生成的显示类,然后由于没有映射显示类而发生映射错误。

    …+<>c_DisplayClass5'未映射。检查类型是否没有 通过使用Ignore方法或 NotMappedAttribute数据注释。验证是否已定义类型 作为一个类,不是基元的、嵌套的或泛型的,并且不继承 来自EntityObject。

    我在方法中使用的导致问题的表达式是:

    UniqueIds.FirstOrDefault(x => x.IdentifierType.Name == keyword);
    

    我映射类型,其中:

    .Where(x => x.Namespace != null
                      && !x.IsAbstract
                      && !x.IsEnum
                      && x.Namespace.StartsWith("<removedprefix>.Domain")
    

    注意,我实际上并没有使用“removedprefix”,只是出于隐私原因,我不想透露名称空间。

    如何在域类方法中使用Linq表达式而不出现上述错误?

    编辑:当然,我想在不禁用延迟加载的情况下解决这个问题。

    1 回复  |  直到 12 年前
        1
  •  1
  •   Diego Tubello    11 年前

    这个线程有点旧,但我也遇到了同样的问题。由于Linq生成的类型是“Nested and Private”,而映射的类通常不是,因此可以这样修改过滤器:

    .Where(x => x.Namespace != null
                && !x.IsAbstract
                && !x.IsEnum
                && !x.IsNestedPrivate //Not nested and private
                && x.Namespace.StartsWith("<removedprefix>.Domain")
    

    我希望这仍然有帮助。