2010-08-19 136 views
2

如果将“代码生成策略”设置为“无”的实体数据模型(EDMX),EF如何确定将概念模型映射到哪些CLR类型?MS Entity Framework如何从概念模型映射到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对象放在另一个程序集中?或者我应该采取第三种方法?

谢谢。

回答

4

通知从ADO.NET团队博客此评论:

杰夫·2010年2月25日9:10 AM @Derek

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

需要注意的一个方面是,如果您的 有多个类型,但名称空间不同,名称相同 。由于 我们没有考虑命名空间,所以我们 检测到我们已经找到多种类型 ,并且我们抛出异常。

杰夫

看到这篇文章: link text