Подтвердить что ты не робот

Создание базы данных SQL для SQLite из модели Entity Framework

Можно ли создать базу данных 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"'

Не должно ли это работать?

EDIT:

Поскольку никто, кажется, не знает ответа, я сделаю это проще: возможно ли генерировать код SQL с EF для любой базы данных, отличной от MICROSOFT SQL SERVER?

4b9b3361

Ответ 1

Я искал для этого решение, когда я наткнулся на эту ссылку: 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 в конструкторе объектов.

Как только вы это сделаете, модель создаст SQL, подходящую для SQLite.

Ответ 2

Файл SSDLToSQLite3.tt, похоже, имеет ошибку, в которой первичные ключи не определены для таблиц, которые имеют единственный первичный ключ, который не относится к сорту INTEGER PRIMARY KEY AUTOINCREMENT.

Самое простое изменение, которое я обнаружил, заключается в том, чтобы изменить line 105 файла .tt:

if (keyCount > 1)

в

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