web-dev-qa-db-fra.com

SQLite dans ASP.NET Core avec EntityFrameworkCore

Comment ajouter et utiliser une base de données SQLite dans une application Web ASP.NET Core à l’aide de EntityFramework 7?

J'ai plongé dans ASP.NET Core dès que j'en ai entendu parler et que j'ai créé ma première application Web. J'ai soudainement eu un tas de données que je voulais stocker et SQLite semblait être le choix évident.
Puisque je voulais que mon application reste en place, gardez-la légère, simple et évitez de configurer une base de données séparée.

Alors, comment pourrait-on créer une base de données SQLite dans ASP.NET Core?

  • ASP.NET Core - anciennement ASP.NET MVC 6
  • EntityFramework Core - maintenant appelé EntityFramework 7
36
Cicero

Mise à jour: 4 novembre 2016.
Reformatage - images en exemples de code.
Info : n'oubliez pas que dans certains exemples de code, le code généré par le modèle Visual Studio ont été omis.

Mise à jour: 11 juillet 2016.
. NET Core et EntityFrameWork Core version 1.0 sont à nos portes!
Ce guide mérite donc une petite mise à jour

Étape 1:
Créez votre application.
enter image description here

Étape 2:
Obtenez les paquets nécessaires
Microsoft.EntityFrameworkCore 1.0.0
Microsoft.EntityFrameworkCore.SQlite 1.0.0

Étape 3:
Créez votre contexte:
(Le contexte sera une classe que vous créez)

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

Étape 4:
Ajoutez votre contexte à vos services:
(Situé dans votre classe de démarrage)

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

Étape 5:
Créez votre base de données au démarrage en l'ajoutant à la méthode de démarrage
(Situé dans la classe de démarrage)

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

Et voilà!
Vous pourrez maintenant utiliser SQLite dans vos applications ASP.NET Core.
L'ancien guide s'applique toujours à la manière dont vous créez vos modèles et à votre contexte de base de données.


Mise à jour: 28 mai 2016.
. NET Core RC2 et EntityFramework Core RC1 ont été publiés.
Ils ont amélioré et simplifié les étapes de configuration de SQLite.
Mais je rencontre des problèmes avec ce logiciel et je ne peux pas le répliquer, à cause d’une erreur avec la bibliothèque Newtonsoft.Json et NuGet.

Je recommande de s'en tenir aux bibliothèques RC1 si vous voulez faire cela, pour l'instant!


Étape 1:
Créez votre application Web ASP.NET

ASP.NET5WebApp

Étape 2:
Cliquez sur Outils -> Gestionnaire de paquets Nuget -> Gérer les paquets Nuget pour la solution.
Recherchez EntityFramework.SQLite Et cochez la case Include prelease.
Installez le paquet

NugetEF7Sqlite

Étape 3: Créer un contexte
Créez une classe de contexte pour votre base de données.
Appelez ça comme vous voulez, mais passons à quelque chose qui est coutumier, comme MyDbContext. Faites que votre nouvelle classe hérite de la classe DbContext et substitue la méthode OnConfiguring et définisse votre connexion de la manière suivante:

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);
    }
}

Étape 4:
Accédez au Startup.cs Et assurez-vous que votre base de données est créée au début de votre application 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();
        }

    }

Deuxièmement, nous devons ajouter le service:

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

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

Étape 5: Définir vos modèles
Créez vos modèles et allez à MyDbContext.cs Et ajoutez une nouvelle propriété pour chacun de vos nouveaux modèles (étant donné que vous voulez une table pour chacun!)
Voici un exemple:
Mon modele:

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

    public string Title { get; set; }

    public string Description { get; set; }

    public string UrlSlug { get; set; }
}

En l'ajoutant à mon contexte:

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);
    }
}

Étape 6: Utiliser le contexte
Allez sur votre HomeController et ajoutez un nouveau champ à votre contrôleur.
private readonly MyDbContext _myDbContext = new MyDbContext();
Et utilisez-le dans un ActionResult en le passant à la vue renvoyée: (supposons maintenant que nous avons une catégorie dans notre base de données)

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

Vous pouvez donc utiliser nos données imaginaires de la base de données en vous rendant dans la vue Index. En définissant un modèle en haut de votre vue, procédez comme suit:

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


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

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

Maintenant, en lançant notre application Web et en accédant à l'adresse attribuée, nous devrions voir une page HTML par défaut avec un en-tête de fantaisie bootstrap), ce qui apparaît sur la page:
webpage

La deuxième ligne est (ou serait) le titre de notre première catégorie dans notre base de données.

Docs Entity Framework 7

Ceci est mon premier Q & A - si vous avez des idées ou quelque chose qui mérite une clarification, n'hésitez pas à commenter.
Voici un exemple très basique d'implémentation d'une base de données SQLite dans une application Web ASP.NET Core MVC.
Notez qu'il existe plusieurs façons de définir la chaîne de connexion pour la base de données, comment utiliser le contexte et qu'EntityFramework 7 est toujours une version préliminaire
.

90
Cicero

Si vous souhaitez créer une application Web ASP.NET Core utilisant SQLite pour la base de données, je vous recommande vivement d'utiliser Yeoman pour l'échafauder à votre place. Vous devez d'abord installer .NET Core 1.1 SDK (Visual Studio 2015 ne semble inclure que les versions 1.0.0 et 1.0.1 du SDK pour le moment). Vous devez ensuite installer Node.js qui est fourni avec npm, puis installer les packages npm suivants: yo et generator-aspnet . Ensuite, tout ce que vous avez à faire est de lancer yo aspnet et répondez à quelques questions.

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

Ensuite, vous obtiendrez la réponse suivante:

 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

Courir dotnet restore, dotnet ef database update, et alors dotnet run et allez à localhost:5000 pour vous assurer que le projet est en cours d'exécution.

Vous pouvez maintenant ouvrir le projet dans Visual Studio 2015 (si vous êtes sous Windows) ou dans le code Visual Studio.

ASP.NET Core web application generated using Yeoman

La grande chose à ce sujet est que Startup.cs, project.json, et appsettings.json Les fichiers sont configurés pour utiliser SQLite. De plus, une base de données SQLite est créée pour vous:

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"
  }
}

Votre base de données SQLite sera située dans bin/Debug/netcoreapp1.0. Dans mon cas, il se trouve dans C:\Development\WebApplication\bin\Debug\netcoreapp1.0\WebApplication.db

Si vous souhaitez renommer la base de données SQLite, modifiez appsettings.json fichier et exécutez dotnet ef database update.

Pour en savoir plus sur l'utilisation de la base de données SQLite avec .NET Core et EF Core, consultez cet article: .NET Core - Nouvelle base de données

7
kimbaudi