问题标签 [sqlmetal]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
243 浏览

.net - 让 mono 的 SqlMetal 理解 PostgreSQL 中用户/扩展定义的类型

我正在尝试将我的 rails webapp 移植到 C#(mono),并且我想使用相同的数据库。当我尝试使用 sqlmetal 创建 Linq 架构时,我收到以下错误消息:

我的数据库使用两个扩展:hstorePostGIS。当我删除这两个扩展时,sqlmetal 设法正确创建模式。两个扩展都会导致错误 - 当我只删除一个(都尝试过)时,我仍然得到它。当然,删除这些扩展并不是一个真正的选择......

据我所知,问题在于 sqlmetal 不理解这些扩展中定义的自定义类型。我在网上搜索过,发现我需要使用自定义模式加载器来定义如何处理这些类型,而 sqlmetal 的嵌入式文档说我应该这样做--with-schema-loader- 但我仍然找不到如何去做:

  • --with-schema-loader定义了用作自定义加载器的类,但是在哪里可以指定包含该类的 DLL 文件?
  • 我应该如何编写该模式加载器?我找不到示例,但嵌入式文档说它需要实现 ISchemaLoader。我找不到它的文档,它的源代码也没有告诉我任何东西(我期待像 MyBatis 的 YypeHandlers 之类的东西......)

谁能指导我如何做到这一点?

0 投票
1 回答
163 浏览

sql - SQLMetal - 具有多个字段的外键约束 - 错误

当我尝试在定义多个字段的外键约束的 sqlite 数据库上运行 SQLMetal 时,出现错误。

表格如下:

错误信息是:

有人知道如何解决这个问题吗?

0 投票
1 回答
703 浏览

visual-studio-2010 - 在 Visual Studio 2010 表设计器中使用枚举

我正在使用 VS 2010 pro 中的表设计器设计数据库,然后使用 SqlMetal 生成代码。

我想enum在其中一列中使用 a 作为类型。

这怎么可能?

0 投票
0 回答
165 浏览

visual-studio-2010 - VS2010 DBML Designer 重命名关联

我们使用 SQL Server Data Tools 项目 (.sqlproj) 管理数据库的结构,在 Visual Studio 中创建新对象并将它们发布到 SQL Server 实例(直接或通过生成发布脚本)。

SSDT 使用以下格式自动命名 FK

FK_ThisTable_ThatTable

我们使用 SqlMetal 生成 Linq-to-SQL DBML。

如果我在 VisualStudio 的设计器中打开 DBML,修改图表布局并保存,DBML 现在包含

这意味着由于 MSLinqToSQLGenerator 进行了不必要的更改以及在运行 SqlMetal 后恢复了原始名称,我们在 TFS 源代码控制中的 DBML 文件的历史记录变得更加难以阅读。

如何阻止 Visual Studio 的 DBML 设计器修改 FK 名称?

0 投票
1 回答
436 浏览

c# - Ling To Sql:数据库版本不兼容

我在 Visual Studio 中创建了一个扩展名为 .sdf 的本地数据库文件(Sql Server Compact 数据库文件),并且我使用 SqlMetal.exe 将 Linq 连接到我的 Sql 数据库文件。但是它给了我一个错误,说不兼容的数据库版本。

考虑一下我安装了 Microsoft SQl Compact 服务器,包括 32 位和 64 位版本,并且我在 Windows 8、64 位上运行。有谁知道如何修理它 ?谢谢

0 投票
0 回答
101 浏览

c# - SqlMetal 无法为某些表生成新的外键关联

我的团队正在使用 SqlMetal 从 SqlServer 数据库生成数据库类。它适用于我们所有现有的类和外键关联,但它拒绝为我们要添加的特定新外键关联生成代码。这个键是从一个审计表到一个全局事件表,详细说明审计记录的创建时间和创建它的用户。系统中存在许多其他审计表和这个全局“事件”表之间的类似外键关联,SqlMetal 为这些关联生成代码。

我尝试通过以下方式解决此问题:

  • 删除并重新创建表
  • 删除主键
  • 创建具有不同名称的新相同表
  • 从表中删除所有其他字段
  • 转储索引
  • 执行新的数据库构建
  • 重命名外键

以上似乎都不能解决问题。但是,SqlMetal 确实为从该表到系统中一些(但不是全部)其他表的外键关联正确地生成了代码。这两个表之间的关联只会在我更改原始创建表脚本以包含外键关联而不是稍后运行它(或新的等效表)时生成。不幸的是,我们需要能够将此更改作为脚本部署到我们现有的生产数据库中,因此这不是一个选项。我看过几篇文章和论坛帖子提到了类似的问题,但似乎都没有给出任何解决方案甚至是解释。

0 投票
1 回答
72 浏览

c# - 我们可以使用 SQLMetal Objectmodel 作为应用程序对象模型吗?

我们的团队刚刚开始使用 Sql Metal,我已经玩了 2 天。在这样做时,我注意到了几件事。

  1. 当我们运行如下命令时

sqlmetal /code:ps.cs /server:devapp042dbs /database:promotionalsponsorship /namespace:DAL

它创建一个“LINQ to SQL SQLMEtal”对象模型。现在,这不是我们的常规课程。它有很多自动生成的代码,它几乎闻起来像 LINQ/EF,有很多自动生成的属性和方法。

我使用了 Service stack 中的 Dapper 和 ORMLite 之类的 Micro ORM,关于这些的有趣之处在于它可以与我们创建的简单对象模型一起使用,而不是自动生成自己的对象模型。

我的问题是,我们可以使用这些 SQLMetal 映射类作为应用程序的模型,还是必须围绕它创建一个简单的包装类,使用它我们可以提取我们需要的所有信息。

为了澄清我的观点,下面是我称之为SQL 金属类简单模型类的示例

0 投票
1 回答
545 浏览

c# - 使用 sqlmetal 为 npgsql 生成 linq 类

我正在尝试从 Linux 上的现有 PostgreSql 数据库为 Linq(或实体框架 6)生成 c# 类。我在一个 monodevelop 项目中安装了 npgsql 和 Entity Framework 6,并且能够使用纯 SQL 查询数据库。

但是当我尝试使用 Sqlmetal 生成 Linq 类时:

我收到以下错误:

sqlmetal:无法加载 databaseConnectionType 类型“npgsql”。尝试使用 --with-dbconnection=TYPE 选项。

我不知道在 --with-dbconnection 之后放什么

0 投票
1 回答
225 浏览

c# - SQLMetal 与 SQL Server CE 不兼容的数据库错误

我在我的 C# 项目中创建了一个简单的 SQL Server Compact 数据库。当我尝试使用SQLmetal我的database1.sdf文件创建代码文件时,我收到以下错误消息

错误:不兼容的数据库版本。如果这是兼容文件,请运行修复。对于其他情况,请参阅文档。[ Db 版本 = 4000000,请求版本 = 3505053,文件名 = \?\C:\Documents\Visual Studio 2012\Projects\WpfApplication5\WpfApplication5\Database1.sdf ]

我曾多次尝试将项目参考更改为System.data.SqlServerCe3.5 和 4.0,每次我都尝试使用新的 SQL Server Compact 数据库创建一个新的示例项目。

任何帮助将不胜感激。

谢谢。

0 投票
1 回答
159 浏览

c# - 使用 SQLMetal 生成的类更新表时,关键字“WHERE”附近的语法不正确

我在 SQL Server 中有一个非常基本的表(双键,没有外键)。我已经使用 SQLMetal 生成了映射代码。我还扩展了自动生成的部分类,所以我可以实现 IEquatable。问题是,一旦我实现了 IEquatable,我就无法使用我的 SQLMetal 生成的类来更新记录。提交更改时,我收到以下异常:

关键字“WHERE”附近的语法不正确

下面的示例代码说明了这个问题。在实现 IEquatable 之前它运行良好:

这是我对 IEquatable 的实现(由 ReSharper 自动生成):

查看在输出窗口中打印的查询。实现 IEquatable 时,SET 子句为空(并导致抛出异常):

UPDATE [dbo].[TestTable]
SET
WHERE ([PrimaryKey1] = @p0) AND ([PrimaryKey2] = @p1) AND ([TheValue] = @p2)
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [123]
-- @p1: 输入 NVarChar (Size = 4000; Prec = 0; Scale = 0) [Red]
-- @p2: 输入 NVarChar (Size = 4000; Prec = 0; Scale = 0) [8dedfdca-84e9-4b7a-9268-4bbdde2e9ad2]

这是没有实现 IEquatable 的相同输出:

UPDATE [dbo].[TestTable]
SET [TheValue] = @p3
WHERE ([PrimaryKey1] = @p0) AND ([PrimaryKey2] = @p1) AND ([TheValue] = @p2)
-- @p0: 输入 Int ( Size = -1; Prec = 0; Scale = 0) [123]
-- @p1: 输入 NVarChar (Size = 4000; Prec = 0; Scale = 0) [Red]
-- @p2: 输入 NVarChar (Size = 4000 ; Prec = 0; Scale = 0) [8f6e72ee-f89e-40f3-830f-18e8b4b40f9e]
-- @p3: Input NVarChar (Size = 4000; Prec = 0; Scale = 0) [1ecaff9d-d460-4f3e-b35d-138ddeb2fb63 ]

这种行为是预期的吗?有没有办法绕过它?