【问题标题】:Using SqlEntityConnection, mapping of CLR type to EDM type is ambiguous使用 SqlEntityConnection,CLR 类型到 EDM 类型的映射不明确
【发布时间】: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


【解决方案1】:

这是因为您使用的是 POCO 并且有两个具有相同类型名称的类型。 EF 忽略命名空间,因此具有相同名称但不同命名空间的两种类型对于 EF 来说是不明确的。 (http://entityframework.codeplex.com/workitem/483)

【讨论】:

  • SqlEntityConnection 严格来说是数据库优先的。不可能涉及 POCO。
  • 好的,我知道这个问题。但在这种情况下,EF(通过类型提供程序)正在映射系统表,这就是导致错误的原因。如何停止映射此表?
  • @JoelMueller - 这不是真的。 VS2010 中的默认代码生成器会生成 EntityObject,但在 VS2012 中它将生成 POCO。即使对于 VS2010,您也可以使用 POCO T4 模板来为 Database First 生成 POCO 类型。
  • @rachel - 我没有使用过 F# 和 SqlEntityConnection。如何创建 edmx 文件和类?如果您不希望 dtproperties 类型存在,那么用于创建 edmx 文件(和类型)的工具似乎没有让您选择您想要的表。您可以尝试使用 VS2012 并在从数据库创建模型时取消选择不需要的表。
  • @Pawel 基本上,您不需要 edmx 文件和类,这就是我有点迷茫的原因。 (见msdn.microsoft.com/en-us/library/hh361035.aspx)我一直希望得到一面旗帜或什么?几乎唯一需要的代码是:type private EntityConnection = SqlEntityConnection<ConnectionStringName="CustomerDB"> 然后let context = EntityConnection.GetDataContext()
猜你喜欢
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-11
  • 2014-07-31
相关资源
最近更新 更多