25

Come si aggiunge e si utilizza un database SQLite in un'applicazione Web ASP.NET Core, utilizzando EntityFramework 7?SQLite in ASP.NET Core con EntityFrameworkCore

Mi sono tuffato in ASP.NET Core nel momento in cui ne ho sentito parlare e ho creato la mia prima applicazione web, ho avuto improvvisamente un sacco di dati che volevo memorizzare e SQLite sembrava la scelta più ovvia.
Dal momento che volevo che rimanesse con la mia applicazione, tenerlo leggero, semplice ed evitare di creare un database separato.

Quindi, come procedere per la creazione di un database SQLite in ASP.NET Core?

  • ASP.NET core - la società precedentemente conosciuta come ASP.NET MVC 6
  • EntityFramework Nucleo - oggi noto in precedenza come EntityFramework 7

risposta

71

aggiornamento: 4 novembre 2016.
riformattazione - immagini per esempi di codice.
Info: Tenete presente che in alcuni esempi di codice, il codice che è stato generato dal modello di Visual Studio sono stati omessi.

Aggiornamento: July 11th, 2016.
versione .NET Core e EntityFramework core 1.0 è su di noi!
Quindi questa guida merita un piccolo aggiornamento

Fase 1:
Crea la tua applicazione.
enter image description here

Fase 2:
Ottenere i pacchetti necessari
Microsoft.EntityFrameworkCore 1.0.0
Microsoft.EntityFrameworkCore.SQlite 1.0.0

Fase 3:
Crea il tuo contesto :
(Il contesto sarà una classe creata)

public class DatabaseContext : DbContext 
{ 
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     optionsBuilder.UseSqlite("Filename=MyDatabase.db"); 
    } 
} 

Fase 4:
Aggiungi il tuo contesto ai vostri servizi:
(che si trova nella classe di avvio)

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddEntityFrameworkSqlite().AddDbContext<DatabaseContext>(); 
} 

Fase 5:
creare il database all'avvio, da parte aggiungendolo al metodo di avvio
(Situato nella classe di avvio)

public Startup(IHostingEnvironment env) 
{ 
    using(var client = new DatabaseContext()) 
    { 
     client.Database.EnsureCreated(); 
    } 
} 

Et Voíla!
Ora sarà possibile utilizzare SQLite nelle applicazioni ASP.NET Core.
La vecchia guida si applica ancora al modo in cui si creano i modelli e si utilizza il contesto del database.


Aggiornamento: May 28th, 2016.
.NET Nucleo RC2 e EntityFramework core RC1 sono stati rilasciati.
Hanno migliorato e semplificato i passaggi per l'impostazione di SQLite.
Ma sto riscontrando qualche problema con esso e non riesco a replicarlo, a causa di un errore con la libreria Newtonsoft.Json e NuGet.

Si consiglia di attenersi alle librerie RC1 se si desidera eseguire questa operazione, per ora!


Fase 1:
Creare l'applicazione web ASP.NET

ASP.NET5WebApp

Fase 2:
Vai su Strumenti -> Nuget Packet Manager -> Gestisci Nuget Pacchetti per soluzione.
Cerca EntityFramework.SQLite e controlla la casella Include prelease.
Installare il pacchetto

NugetEF7Sqlite

Fase 3: creazione di un contesto
creare una classe contesto per il database.
Chiamalo come vuoi, ma andiamo con qualcosa di personalizzato, come MyDbContext. Fai la tua nuova classe eredita la classe DbContext e sovrascrivere il metodo OnConfiguring e utilizzare per la connessione in questo modo:

public class MyDbContext : DbContext 
{ 
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     var connectionStringBuilder = new SqliteConnectionStringBuilder { DataSource = "MyDb.db" }; 
     var connectionString = connectionStringBuilder.ToString(); 
     var connection = new SqliteConnection(connectionString); 

     optionsBuilder.UseSqlite(connection); 
    } 
} 

Fase 4:
Vai alla Startup.cs e assicurarsi che il database viene creato all'inizio del l'applicazione web:

public Startup(IHostingEnvironment env) 
    { 
     // Set up configuration sources. 
     var builder = new ConfigurationBuilder() 
      .AddJsonFile("appsettings.json") 
      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);   


     using (var db = new MyDbContext()) 
     { 
      db.Database.EnsureCreated(); 
      db.Database.Migrate(); 
     } 

    } 

In secondo luogo abbiamo bisogno di aggiungere il servizio:

public void ConfigureServices(IServiceCollection services) 
    { 
     // Add framework services. 
     services.AddMvc(); 

     services.AddEntityFramework() 
     .AddSqlite() 
     .AddDbContext<MyDbContext>(); 
    } 

Passo 5: Definire i vostri modelli
Crea il tuo modelli e andare a MyDbContext.cs e aggiungere una nuova proprietà per ognuno dei vostri nuovi modelli (dato che si vuole un tavolo per ciascuno!)
Ecco un esempio:
Il mio modello:

public class Category 
{ 
    public int Id { get; set; } 

    public string Title { get; set; } 

    public string Description { get; set; } 

    public string UrlSlug { get; set; } 
} 

aggiungendolo al mio contesto:

public class MyDbContext : DbContext 
{ 
    public DbSet<Category> Categories { get; set; } 

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     var connectionStringBuilder = new SqliteConnectionStringBuilder { DataSource = "MyDb.db" }; 
     var connectionString = connectionStringBuilder.ToString(); 
     var connection = new SqliteConnection(connectionString); 

     optionsBuilder.UseSqlite(connection); 
    } 
} 

Fase 6: Uso del contesto
Vai al tuo HomeController e aggiungere un nuovo campo al tuo controller.
private readonly MyDbContext _myDbContext = new MyDbContext();
e utilizzarlo in un ActionResult passandolo alla vista restituita: (Ora lascia supporre che abbiamo una categoria nel nostro database)

public IActionResult Index() 
{ 
    var category = _myDbContext.Categories.First(); 
    return View(category); 
} 

Così andando alla visualizzazione indice, è può usare i nostri dati immaginari dal database. Con la definizione di un modello nella parte superiore della visualizzazione in questo modo:

@model MyNameSpace.Models.Category 
@{ 
    ViewData["Title"] = "Hey Ho! SO!"; 
} 


<div class="page-header"> 
    <h1>@ViewData["Title"]</h1> 
</div> 

<div class="container"> 
    @Model.Title 
</div> 

Ora avviando la nostra applicazione web e andare in indirizzo assegnato dovremmo vedere una pagina HTML di default con un colpo di testa di bootstrap di fantasia, che mostra questo nella pagina :
webpage

La seconda riga è (o sarebbe) il titolo della nostra prima categoria nel nostro database.

Entity Framework 7 Docs

Questo è il mio primo Q & A - se avete qualsiasi ingresso o qualcosa che ha bisogno di chiarire, non esitate a commentare.
Questo è un esempio molto semplice di come implementare un database SQLite in un'applicazione Web ASP.NET Core MVC.
Do atto che c'è diversi modi per impostare la stringa di connessione per il database, come utilizzare il contesto e che EntityFramework 7 è ancora una prerelease

6

Se si desidera creare un'applicazione Web ASP.NET core utilizzando SQLite per il database, consiglio vivamente di utilizzare Yeoman per impalcare l'app per te. È necessario prima installare .NET Core 1.1 SDK (Visual Studio 2015 sembra includere solo versioni di SDK 1.0.0 e 1.0.1 al momento). È quindi necessario installare Node.js fornito con npm e quindi installare i seguenti pacchetti npm: yo e generator-aspnet. Quindi tutto ciò che devi fare è eseguire yo aspnet e rispondere ad alcune domande.

C:\Development>yo aspnet 
? ========================================================================== 
We're constantly looking for ways to make yo better! 
May we anonymously report usage statistics to improve the tool over time? 
More info: https://github.com/yeoman/insight & http://yeoman.io 
========================================================================== Yes 

    _-----_  ╭──────────────────────────╮ 
    |  | │  Welcome to the  │ 
    |--(o)--| │ marvellous ASP.NET Core │ 
    `---------´ │  generator!  │ 
    (_´U`_) ╰──────────────────────────╯ 
    /___A___\ /
    | ~ | 
    __'.___.'__ 
´ ` |° ´ Y ` 

? What type of application do you want to create? Web Application 
? Which UI framework would you like to use? Bootstrap (3.3.6) 
? What's the name of your ASP.NET application? WebApplication 

In seguito, si otterrà la seguente risposta:

Your project is now created, you can use the following commands to get going 
    cd "WebApplication" 
    dotnet restore 
    dotnet build (optional, build will also happen when it's run) 
    dotnet ef database update (to create the SQLite database for the project) 
    dotnet run 

Run dotnet restore, dotnet ef database update, e poi dotnet run e andare a localhost:5000 per assicurarsi che il progetto è in esecuzione.

Ora è possibile aprire il progetto in Visual Studio 2015 (supponendo che tu sia su Windows) o Codice di Visual Studio.

ASP.NET Core web application generated using Yeoman

La cosa grandiosa di questo è che Startup.cs, project.json e appsettings.json i file sono stati impostati per utilizzare SQLite. Inoltre, un database SQLite è stato creato per voi:

Startup.cs:

public void ConfigureServices(IServiceCollection services) 
{ 
    // Add framework services. 
    services.AddDbContext<ApplicationDbContext>(options => 
     options.UseSqlite(Configuration.GetConnectionString("DefaultConnection"))); 
} 

project.json:

{ 
    "Microsoft.EntityFrameworkCore.Sqlite": "1.1.0", 
    "Microsoft.EntityFrameworkCore.Sqlite.Design": { 
     "version": "1.1.0", 
     "type": "build" 
    } 
} 

appsettings.json

{ 
    "ConnectionStrings": { 
    "DefaultConnection": "Data Source=WebApplication.db" 
    } 
} 

Il database SQLite si trova in bin/Debug/netcoreapp1.0. Nel mio caso, si trova in C:\Development\WebApplication\bin\Debug\netcoreapp1.0\WebApplication.db

Se si desidera rinominare il database SQLite, modificare il file appsettings.json ed eseguire dotnet ef database update.

Per saperne di più su come utilizzare database SQLite con .NET Core e EF core, consulta questo articolo: .NET Core - New Database

+0

Il quadro specificato 'Microsoft.NETCore.App', versione '1.1.0' non è stato trovato. Così ora ha bisogno di 1.1.0 - il generatore di yog aspnet rompe la compatibilità con la v 1.0.1 .. – hB0

+1

Se hai intenzione di usare Visual Studio con Yeoman, hai 2 scelte: 1) [scarica .NET Core 1.1 SDK ] (https://www.microsoft.com/net/core#windowscmd) e [aggiorna NuGet a Beta] (http://docs.nuget.org/ndocs/guides/install-nuget#nuget-beta-channel) . 2) Modificare manualmente 'package.json' e modificare" 1.1.0-preview4-final "in" 1.0.0-preview2-003131 "(e anche modificare" 1.1.0 "in" 1.0.1 ". 'global.json', assicurati che sdk.version sia ancora" 1.0.0-preview2-003131 "a prescindere da ciò che stai scegliendo.MS si sta sbarazzando di' package.json' in favore di '.csproj' quindi è necessario riconoscere 'package.json' – kimbaudi