2010-11-24 105 views
11

是否有可能从具有实体框架的模型生成SQLite数据库?我创建了一个SQLite连接并创建了一个模型,但是当我点击“从模型生成数据库”时,我得到以下内容,它看起来像MS SQL,并且在使用SQLite执行时发生错误(只是文件的开头):从实体框架模型生成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"' 

难道不应该以这种方式工作?

编辑:

由于没有人似乎知道答案,我会更容易:是否有可能产生与EF SQL代码比MICROSOFT SQL SERVER其他任何数据库?

回答

11

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

放置SSDLToSQLite3.tt文件在C:\ Program Files文件(x86)的\微软的Visual Studio 10.0 \ Common7 \ IDE \扩展\微软\实体框架工具\ DBGen,你应该能够选择它作为实体设计器中的DDL生成模板。

一旦你这样做了,模型将创建适合SQLite的SQL。

+2

`SSDLToSQLite3.tt`似乎做TE工作。谢谢。由于我已安装完整的System.Data.SQLite发行版的最新版本,因此不需要执行本文中描述的任何配置文件修改。唯一不明显的是找到如何应用它 - 我并没有在模型属性中选择它(右键单击设计器的可用空间并在其中选择属性)。 – Ivan 2013-01-19 15:44:19

2

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

最简单的改变我发现,做的伎俩是从改变.tt文件line 105

if (keyCount > 1) 

到:

if (keyCount > 1 | (keyCount > 0 & autoIncreaseFieldName == string.Empty)) 
相关问题