20

के साथ SQLite मैं ईएफ के साथ फ्लाई पर एक एम्बेडेड SQLite डेटाबेस बनाने की कोशिश कर रहा हूं, हालांकि, मैं इसे काम नहीं कर सकता, डेटाबेस फ़ाइल कभी नहीं बनाई जा रही है।हाउटो: एंटीटीफ्रेमवर्क और कोड-फर्स्ट

मैं एफई 4.2 और नवीनतम संस्करण SQLite

यहाँ है कि मैं क्या है

app.config

<?xml version="1.0"?> 
<configuration> 
    <system.data> 
    <DbProviderFactories> 
     <remove invariant="System.Data.SQLite"/> 
     <add name="SQLite Data Provider" 
      invariant="System.Data.SQLite" 
      description=".Net Framework Data Provider for SQLite" 
      type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite"/> 
    </DbProviderFactories> 
    </system.data> 
    <connectionStrings> 
    <add name="DataContext" 
     connectionString="Data Source=test.db;Version=3;New=True;" 
     providerName="System.Data.SQLite" /> 
    </connectionStrings> 
    <startup> 
    <supportedRuntime version="v4.0" /> 
    </startup> 
</configuration> 

डीबी प्रारंभकर्ता (में कुछ सामग्री डाल करने के लिए)

class PageDbInitializer : DropCreateDatabaseAlways<PageDB> 
{ 
    protected override void Seed(PageDB context) 
    { 
     for (int i = 0; i < 10; i++) 
     { 
      WebPage page = new WebPage() { Name = "Page" + (i + 1) }; 
      context.Pages.Add(page); 
     } 
     base.Seed(context); 
    } 
} 

DbContext:

class PageDB : DbContext 
{ 
     public DbSet<WebPage> Pages { get; set; } 
} 

और अंत में मुख्य में()

Database.SetInitializer(new PageDbInitializer()); 

मेरा मानना ​​है कि मुझे याद आ रही कुछ कदम है, लेकिन उन्हें बाहर नहीं मिल रहा।

+0

जिज्ञासा से बाहर, तुमने क्या किया? क्या आपने डिवार्ट प्रदाता का उपयोग किया है या कोई अन्य समाधान ढूंढ लिया है? –

+0

@StellaMusik मैं समय के लिए SQLExpress का उपयोग कर समाप्त हुआ, लेकिन आप हमेशा SQLLite –

+0

@PierlucSS के साथ एक ही समस्या का सामना कर मॉडल या डेटाबेस का उपयोग कर सकते हैं। मैं देवता का इतना उपयोग नहीं करना चाहता हूं कि यह मॉडल-पहले –

उत्तर

23

System.Data.SQLite वर्तमान संस्करण में केवल ईएफवी 1 संगत प्रदाता (1, 2) है। इसका मतलब है कि इसमें ईएफवी 4 (ईएफवी 4.2 ईएफवी 4 के आसपास रैपर नहीं है) डेटाबेस निर्माण और हटाने सहित विशेषताएं (DbProviderServices .NET 3.5 और .NET 4.0 के लिए MSDN में अंतर)। इसके कारण आप SQLite के साथ काम करते समय पहले कोड के साथ स्वचालित डेटाबेस निर्माण का उपयोग नहीं कर सकते हैं। आपको डेटाबेस और सभी तालिकाओं को मैन्युअल रूप से बनाना होगा।

एक विकल्प के रूप में आप SQLite के लिए विभिन्न प्रदाता का उपयोग कर सकते हैं। उदाहरण के लिए Devart's SQLite provide आर का दावा है कि यह ईएफवी 4 और 4.1 और इस प्रकार डेटाबेस निर्माण का समर्थन करता है।

+20

होगा क्योंकि यह एक पुरानी पोस्ट है, क्या आप जानते हैं कि यह अभी भी एक वैध उत्तर है? मैं वर्तमान में इस बारे में और मेरी शोध प्रगति में जानकारी ढूंढने की कोशिश कर रहा हूं, ऐसा लगता है कि यह अभी भी सच है (लेकिन मुझे यकीन नहीं है) – Default

+0

मैं सत्यापित कर सकता हूं कि मैं अभी भी मौजूदा स्क्लाइट प्रदाता के साथ डेटाबेस नहीं बना सकता। – user3141326

+0

@ user3141326: क्या आप ईएफ कोर (उर्फ ईएफ 7) का प्रयास कर सकते हैं? यह SQLite के लिए प्रदाता में निर्माण होना चाहिए था। –

8

चेक इस बाहर:

https://github.com/msallin/SQLiteCodeFirst

इसके अलावा एक NuGet

यह अपने ptoject करने के लिए कुछ डीबी initializers कहते हैं के रूप में उपलब्ध है, जैसे SqliteCreateDatabaseIfNotExists

यहाँ वेब साइट के उदाहरण है:

public class MyDbContext : DbContext 
{ 
    public MyDbContext() 
     : base("ConnectionStringName") { } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     var sqliteConnectionInitializer = new SqliteCreateDatabaseIfNotExists<MyDbContext>(
      Database.Connection.ConnectionString, modelBuilder); 
     Database.SetInitializer(sqliteConnectionInitializer); 
    } 
} 
संबंधित मुद्दे