【问题标题】:convert sql script into format that can run on sqlite将sql脚本转换为可以在sqlite上运行的格式
【发布时间】:2014-08-26 20:11:13
【问题描述】:

我有一个由实体框架生成的 sql 脚本,它创建了一个非常简单的表。

create table [Destinations] (
    [Id] [int] not null identity,
    [Country] [nvarchar](max) null,
    [State] [nvarchar](max) null,
    [City] [nvarchar](max) null,
    primary key ([Id])
);

我正在尝试在 Sqlite 数据库上运行它,但似乎语法不同。 我试图编写一个替换方法来用他们的 sqlite 版本替换关键字,这不是完全有效的。 我想知道是否有更好的方法来进行这些更改,或者是否有一个库可以在 C# 中执行此操作?

这是转换后的脚本:

create table [Destinations] ( 
[Id] INTEGER not null AUTOINCREMENT , 
[Country] [nvarchar](max) null, 
[State] [nvarchar](max) null, 
[City] [nvarchar](max) null, 
primary key ([Id]) 
);

【问题讨论】:

  • 确切的错误是什么?你的新脚本是什么样的?对于初学者来说,sqllite 中似乎没有 nvarchar 数据类型,这意味着您的实体框架数据类型可能会有所不同,这会导致问题。
  • 这是我的问题,当前脚本是:create table [Destinations] ( [Id] INTEGER not null AUTOINCREMENT , [Country] [nvarchar](max) null, [State] [nvarchar](max ) null, [City] [nvarchar](max) null, 主键 ([Id]) );我试图找到一种工具来自动化这种转换。
  • 我将您的脚本添加到原始问题中。我不知道是否有库可以提供帮助,但 sqllite 中似乎没有 nvarchar 数据类型,我怀疑您是否能够将数据层指向它。为什么需要转换为 SQLLite?
  • 你如何告诉 EF 使用 SQLite 数据提供程序?
  • primary key 已经是AUTOINCREMENT 和not null,它们是不必要的,删除它们然后它就可以工作了。

标签: c# sql database sqlite converter


【解决方案1】:

您想要的精确 SQL 是这样的:

create table [Destinations] ( 
[Id] integer NOT NULL PRIMARY KEY AUTOINCREMENT, 
[Country] [nvarchar], 
[State] [nvarchar], 
[City] [nvarchar]
);

变化:

  1. 主键声明应为integer NOT NULL PRIMARY KEY AUTOINCREMENT
  2. 从类型声明中删除(max)
  3. 从列声明中删除null
  4. 从末尾删除primary key ([Id])(以及相关的逗号)

请注意,SQLite 可以很好地理解nvarchar,并将字段的类型关联设置为TEXT,因为该类型中包含CHAR。见http://www.sqlite.org/datatype3.html

编辑

由于 SQLite 支持 EF,我之前曾评论说这不是必需的。 OP 纠正了我说 SQLite 的 EF 实现不首先支持代码,因此出现了问题。

【讨论】:

  • 没错。它支持实体框架,但不支持代码优先方法。结果,我尝试获取上下文数据库创建脚本,然后 maullat 在 sqlite 数据库上运行它。像这样: sqlScript = (context as IObjectContextAdapter).ObjectContext.CreateDatabaseScript().Replace("[dbo].", "");
  • @user3752903,我没有意识到它不支持代码。我希望我的回答的第一部分对您有所帮助。
猜你喜欢
  • 2015-11-08
  • 2010-10-04
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
相关资源
最近更新 更多