Создать SQL для базы данных SQLite из модели Entity Framework - PullRequest
11 голосов
/ 25 ноября 2010

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

Разве это не должно работать таким образом?

РЕДАКТИРОВАТЬ:

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

Ответы [ 2 ]

11 голосов
/ 14 июня 2011

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

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

2 голосов
/ 25 сентября 2013

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

Самое простое изменение, которое мне удалось найти, это изменить line 105 файла .tt с:

if (keyCount > 1)

до:

if (keyCount > 1 | (keyCount > 0 & autoIncreaseFieldName == string.Empty))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...