代码之家  ›  专栏  ›  技术社区  ›  Rune

MS实体框架如何从概念模型映射到CLR类型?

  •  2
  • Rune  · 技术社区  · 15 年前

    给定一个“代码生成策略”设置为“无”的实体数据模型(EDMX),EF如何确定要将概念模型映射到哪个CLR类型?

    我想我在某个地方读到过,它只是探测与概念模型相匹配的类型的程序集,但这是引用了EF的CTP版本。还是这样吗? 我能控制这个过程吗?

    特别是,我正处于一个场景中,我将大量的代码库从使用linq2sql移动到使用带有ef 4.0的poco。因此,我拥有linq2sql类和poco类,目前它们位于同一个程序集中,但位于不同的名称空间中。我正在尝试从L2S到EF的平稳迁移,所以我想让这两个框架并行运行一段时间。但是,我得到一个运行时错误消息

    clr类型到edm类型的映射为 不明确,因为有多个CLR类型 匹配EDM类型“someType”。 以前找到的clr类型 “SomeNamespace.SomeType”,新找到 clr类型“someNamespace.poco.someType”

    其中somenamespace是L2S实体的命名空间。如果EF只是探测与概念模型匹配的所有类型,则此错误是有意义的。我可以将ef限制为只探测somenamespace.poco命名空间吗?或者我应该把我的poco对象放到另一个程序集中吗?还是应该采取第三种方法?

    谢谢您。

    1 回复  |  直到 15 年前
        1
  •  4
  •   Ken Burkhardt    15 年前

    请注意ADO.NET团队日志中的此评论:

    杰夫2010年2月25日上午9:10@derek

    这是故意的。你可以把你的 任何命名空间中的poco类 你愿意。实体框架的 检测约定机制 实体上的哪些属性匹配 您的 模型不使用命名空间。什么 重要的是类型名(没有 命名空间)与EntityType名称匹配 在您的模型中(edmx/csdl文件)。

    一个值得注意的地方是如果你 具有多个具有相同名称的类型 但是在不同的名称空间中。因为 我们不考虑名称空间,我们 检测到我们发现了多种类型 我们抛出了一个例外。

    杰夫

    请参阅本文: link text