问题 从Entity Framework Model为SQLite数据库生成SQL


是否可以使用实体框架从模型生成SQLite数据库?我创建了一个SQLite连接并创建了一个模型,但是当我单击“从模型生成数据库”时,我得到以下内容,它看起来像MS SQL,并且如果使用SQLite执行会产生错误(只是文件的开头):

-- --------------------------------------------------
-- Entity Designer DDL Script for SQL Server 2005, 2008, and Azure
-- --------------------------------------------------
-- Date Created: 11/25/2010 00:26:41
-- Generated from EDMX file: G:\Foo\Bar\Model1.edmx
-- --------------------------------------------------

SET QUOTED_IDENTIFIER OFF;
GO
USE [foobar.sqlite];
GO
IF SCHEMA_ID(N'dbo') IS NULL EXECUTE(N'CREATE SCHEMA [dbo]');
GO
...

我的连接字符串如下所示,所以我肯定选择了正确的数据库类型:

'metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SQLite;provider connection string="data source=G:\foo\bar\baz"'

它不应该这样工作吗?

编辑:

由于似乎没有人知道答案,我会更容易:是否可以为除MICROSOFT SQL SERVER之外的任何数据库生成带有EF的SQL代码?


9662
2017-11-24 23:39


起源



答案:


当我偶然发现这个链接时,我正在寻找解决方案: http://code.msdn.microsoft.com/Demo-of-ADONET-POCO-with-140ad3ad

将SSDLToSQLite3.tt文件放在C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ Extensions \ Microsoft \ Entity Framework Tools \ DBGen中,您应该可以选择此作为实体中的DDL生成模板设计师。

完成后,模型将创建适合SQLite的SQL。


11
2018-06-14 11:20



SSDLToSQLite3.tt 似乎做了te工作。谢谢。并且没有必要进行文章中描述的任何配置文件修改,因为我安装了完整的System.Data.SQLite发行版的最新版本。唯一不明显的是找到如何应用它 - 我不是新的,它是在模型属性中选择的(右键单击设计器可用空间并在那里选择属性)。 - Ivan


答案:


当我偶然发现这个链接时,我正在寻找解决方案: http://code.msdn.microsoft.com/Demo-of-ADONET-POCO-with-140ad3ad

将SSDLToSQLite3.tt文件放在C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ Extensions \ Microsoft \ Entity Framework Tools \ DBGen中,您应该可以选择此作为实体中的DDL生成模板设计师。

完成后,模型将创建适合SQLite的SQL。


11
2018-06-14 11:20



SSDLToSQLite3.tt 似乎做了te工作。谢谢。并且没有必要进行文章中描述的任何配置文件修改,因为我安装了完整的System.Data.SQLite发行版的最新版本。唯一不明显的是找到如何应用它 - 我不是新的,它是在模型属性中选择的(右键单击设计器可用空间并在那里选择属性)。 - Ivan


SSDLToSQLite3.tt 文件似乎有一个错误,其中没有为具有单个主键的表定义主键 INTEGER PRIMARY KEY AUTOINCREMENT 品种。

我发现最简单的改变就是改变 line 105 的 .tt 来自的文件:

if (keyCount > 1)

至:

if (keyCount > 1 | (keyCount > 0 & autoIncreaseFieldName == string.Empty))

2
2017-09-25 15:40