【发布时间】:2012-12-20 13:45:26
【问题描述】:
我正在尝试重写一个非常简单的应用程序,从 C# 到 F#,现在使用 SqlEntityConnection 类型提供程序,我遇到了一个 EF 问题:“CLR 类型到 EDM 类型的映射不明确”,其中可以通过打开两个 SqlEntityConnections 发生,每个 SqlEntityConnections 都有一个同名的表。
然而,在这种情况下,这是因为 EF 通过类型提供程序显然正在映射系统表。实际错误引用了 dtproperties 表——
{"指定的架构无效。错误:\r\nCLR类型到EDM类型的映射不明确,因为多个CLR类型匹配EDM类型'dtproperties'。之前找到的CLR类型'SqlEntityConnection2.dtproperties',新找到的CLR 类型 'SqlEntityConnection1.dtproperties'。"}
如何更改正在映射的表?谢谢。
(在原来的 C# 版本中这不是问题,它也使用 EF。)
【问题讨论】:
-
我不知道如何过滤类型提供程序为其生成类型的表。如果您的项目中必须有两个 SqlEntityConnection 派生类型,我会首先尝试将它们放在不同的命名空间中。如果这没有帮助,那么我想您可以随时删除“dtproperties”表...
-
@JoelMueller 谢谢,我尝试了不同的命名空间,但似乎没有什么不同。不幸的是,我不能在不激怒 DBA 的情况下删除 dtproperties。 :(
-
您能否使用无权查看“dtproperties”的用户的凭据连接到数据库?
-
嗯,嘘。我可以访问的帐户显然有权查看它。没有帮助,但也是一个问题:我注意到当两个类型提供程序都在同一个实际文件中时,会有一个 obj. ref 未设置为 obj 错误的实例。 耸耸肩?
-
回到这个问题:我一直无法找到正确的答案,但作为一种变通方法,我改用 SQLDataConnection 提供程序,并且能够完成项目。对于一个数据库,我还需要设置 StoredProcedures=false,这样可以消除很多很多架构错误。希望这至少可以帮助其他人。 :)
标签: entity-framework f# type-providers f#-3.0