如何使用表'System'为db创建SqlDataConnection?

时间:2014-08-24 13:26:00

标签: sql-server f# type-providers f#-3.0

我想为一个带有表的数据库创建一个SqlDataConnection类型的提供程序,该表名称恰好是'System'。

在编译过程中,我收到错误:

  

类型提供程序'Microsoft.FSharp.Data.TypeProviders.DesignTime.DataProviders'报告错误:       tmpB600.cs(12,7):警告CS0437:'c:\ Users \ krajewa1 \ AppData \ Local \ Temp \ tmpB600.cs'中的类型'System'与'c:\ Windows中导入的命名空间'System'冲突\ Microsoft.NET \框架\ v4.0.30319 \ System.Configuration.dll”。使用'c:\ Users \ krajewa1 \ AppData \ Local \ Temp \ tmpB600.cs'中定义的类型。       [...](以下数百个错误)

为了解决这个问题,我尝试过:

  • LocalSchemaFile与不包含“System”的dbml文件一起使用 表。它没有帮助,仍然是同样的错误。
  • 使用ContextTypeName参数(我希望将类型放在另一个命名空间中)。它没有帮助,仍然是同样的错误。
  • 为System表创建同义词。当然原始表仍然存在,所以我得到了同样的错误。
  • 显然,将表名更改为'_System'确实有帮助,但在我的情况下在实践中是不可行的。

我的问题与这个问题中的问题完全相同:

SqlDataConnection type provider generates massive error with SQL Server 2008 R2

然而,在该线程中,用户没有找到问题的真正原因,也没有提供答案。

1 个答案:

答案 0 :(得分:1)

我不知道F#但您是否可以为有问题的表名创建SQL Server同义词? http://msdn.microsoft.com/en-gb/library/ms177544.aspx

CREATE SYNONYM [SystemTable] for [System]

然后通过同义词引用该表,而不是它在F#代码中的真实姓名。

可能只需重命名表,但如果有任何其他查询正在运行,则还需要更改它们。同义词表示两个名称都有效