代码之家  ›  专栏  ›  技术社区  ›  codymanix

从实体框架模型生成SQLite数据库的SQL

  •  11
  • codymanix  · 技术社区  · 15 年前

    是否可以从实体框架模型生成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代码?

    2 回复  |  直到 15 年前
        1
  •  11
  •   toxvaerd    14 年前

    我正在寻找解决方案,突然发现了这个链接: 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。

        2
  •  2
  •   dax    12 年前

    这个 SSDLToSQLite3.tt 文件似乎存在一个错误,即没有为具有单个主键的表定义主键,而主键不属于 INTEGER PRIMARY KEY AUTOINCREMENT 不同种类

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

    if (keyCount > 1)
    

    致:

    if (keyCount > 1 | (keyCount > 0 & autoIncreaseFieldName == string.Empty))
    
    推荐文章