2010-11-24 7 views
11

Ist es möglich, eine SQLite-Datenbank aus dem Modell mit Entitätsrahmen zu generieren? Ich habe eine SQLite-Verbindung erstellt und ein Modell erstellt, aber wenn ich auf "Datenbank vom Modell generieren" klicke, bekomme ich folgendes, das aussieht wie MS SQL und Fehler macht, wenn es mit SQLite ausgeführt wird:Generieren von SQL für SQLite-Datenbank von Entity Framework Modell

-- -------------------------------------------------- 
-- 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 
... 

Meine Verbindungszeichenfolge sieht wie folgt aus, so wählte ich auf jeden Fall den richtigen Datenbanktyp:

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

Sollte es auf diese Weise nicht funktionieren?

EDIT:

Da niemand scheint eine Antwort auf weiß, ich werde es einfacher machen: Ist es möglich, SQL-Code mit EF für jede andere Datenbank als Microsoft SQL Server zu generieren?

Antwort

11

ich nach einer Lösung dieses Problems suchen, wenn ich über diesen Link gestolpert: http://code.msdn.microsoft.com/Demo-of-ADONET-POCO-with-140ad3ad

Legen Sie die SSDLToSQLite3.tt Datei in C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ Extensions \ Microsoft \ Entity Framework Tools \ DBGen, und Sie sollten dies als DDL-Generierungsvorlage im Entity Designer auswählen können.

Sobald Sie das tun, wird das Modell SQL für SQLite geeignet erstellen.

+2

'SSDLToSQLite3.tt' te Arbeit zu tun scheint. Vielen Dank. Außerdem mussten keine Änderungen an den Konfigurationsdateien vorgenommen werden, da die neueste Version der vollständigen System.Data.SQLite-Distribution installiert ist. Das einzige, was nicht offensichtlich war, zu finden, wie man es anwendet - ich habe es nicht neu gemacht, es ist in den Modelleigenschaften auszuwählen (rechtsklicke auf den freien Platz des Designers und wähle Eigenschaften dort). – Ivan

2

Die Datei SSDLToSQLite3.tt scheint einen Fehler zu haben, bei dem Primärschlüssel für Tabellen mit einem einzelnen Primärschlüssel, der nicht zur INTEGER PRIMARY KEY AUTOINCREMENT-Sorte gehört, nicht definiert sind.

Die einfachste Änderung fand ich, dass funktioniert der Trick line 105 der .tt Datei aus zu ändern ist:

if (keyCount > 1) 

zu:

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