25

Jak dodać i użyć bazy danych SQLite w aplikacji internetowej ASP.NET Core, używając EntityFramework 7?SQLite w ASP.NET Core z EntityFrameworkCore

Zanurzyłem się w ASP.NET Core, gdy tylko usłyszałem o tym i stworzył moją pierwszą aplikację internetową, nagle miałem masę danych, które chciałem przechowywać, a SQLite wydawał się oczywistym wyborem.
Ponieważ chciałem, aby pozostało z moją aplikacją, zachowaj lekkość, prostotę i unikaj tworzenia oddzielnej bazy danych.

W jaki sposób chciałbyś utworzyć bazę danych SQLite w środowisku ASP.NET Core?

  • ASP.NET Rdzeń - teraz dawniej znany jako ASP.NET MVC 6
  • EntityFramework core - teraz dawniej EntityFramework 7

Odpowiedz

71

zmiana: Listopad 4th, 2016
Ponowne - zdjęcia do przykładów kodu.
Info: Należy pamiętać, że w niektórych przykładach kodu pominięto kod wygenerowany przez szablon Visual Studio.

Aktualizacja: 11 lipca 2016 r
wersja .NET Rdzeń Rdzeń i EntityFrameWork 1.0 jest na nas!
Więc to przypomnienie zasługuje na odrobinę Aktualizacja

Krok 1:
Tworzenie aplikacji.
enter image description here

Krok 2:
uzyskać niezbędne pakiety
Microsoft.EntityFrameworkCore 1.0.0
Microsoft.EntityFrameworkCore.SQlite 1.0.0

Krok 3:
Stwórz swój kontekst :
(Kontekst będzie klasą, którą utworzysz)

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

Krok 4:
Dodaj swój kontekst do swoich usług:
(znajduje się w swojej klasie startowego)

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

Krok 5:
Tworzenie bazy danych przy starcie, przez dodanie go do metody uruchamiania
(Znajduje się w klasie startowej)

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

Et Voíla!
Teraz będziesz mógł używać SQLite w swoich aplikacjach ASP.NET Core.
Stary przewodnik nadal dotyczy sposobu tworzenia modeli, jak również kontekstu bazy danych.


Aktualizacja: 28 maja 2016 r
NET Rdzeń Rdzeń RC2 i EntityFramework RC1 zostały zwolnione.
Ulepszyły one i uprościły procedurę konfigurowania SQLite.
Ale mam pewne problemy z tym i nie mogę go replikować z powodu błędu w bibliotece Newtonsoft.Json i NuGet.

Polecam trzymać się bibliotek RC1, jeśli chcesz to zrobić, na razie!


Krok 1:
Tworzenie aplikacji internetowych ASP.NET

ASP.NET5WebApp

Krok 2:
przejdź do Narzędzia -> Nuget Packet Manager -> Zarządzaj Nuget Pakiety dla rozwiązania.
Wyszukaj EntityFramework.SQLite i zaznacz pole Include prelease.
Zainstaluj pakiet

NugetEF7Sqlite

Krok 3: Tworzenie kontekstu
utworzyć klasę kontekstowe dla bazy danych.
Nazwij to, co chcesz, ale chodźmy z czymś, co jest zwyczajowe, jak MyDbContext. Dodać nowa klasa dziedziczy klasę DbContext i zastąpić metodę OnConfiguring i określenia sposobu połączenia tak:

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

Krok 4:
Przejdź do Startup.cs i upewnić się, że baza danych jest tworzona na początku aplikacja internetowa:

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

    } 

drugie musimy dodać usługę:

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

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

Krok 5: Definiowanie modeli
Załóż swoje modele i przejdź do MyDbContext.cs i dodaj nową właściwość dla każdego z nowych modeli (zważywszy, że chcesz mieć stolik dla każdego!)
Oto przykład:
Moja Model:

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

    public string Title { get; set; } 

    public string Description { get; set; } 

    public string UrlSlug { get; set; } 
} 

dodanie go do mojego kontekstu:

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

Krok 6: Korzystanie z kontekstu
idź do HomeController i dodaj nowe pole do kontrolera.
private readonly MyDbContext _myDbContext = new MyDbContext();
i używać go w ActionResult, przekazując je do zwracanego widzenia: (Teraz Załóżmy mamy kategorię w naszej bazie danych)

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

Więc przechodząc do widoku indeksu, ty może wykorzystywać nasze wyobrażone dane z bazy danych. Poprzez zdefiniowanie modelu w górnej części widoku tak:

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


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

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

Teraz zaczynając naszą aplikację internetową i przechodząc do przypisanym adresem powinniśmy zobaczyć domyślną stronę HTML z fantazyjny nagłówku bootstrap, pokazując to na stronie :
webpage

Druga linia to (lub będzie) tytuł naszej pierwszej kategorii w naszej bazie danych.

Entity Framework 7 Docs

To moja pierwsza Q & A - jeśli masz jakiekolwiek wejście lub coś, co wymaga wyjaśnienia, nie wahaj się wypowiedzieć.
To jest bardzo prosty przykład, jak zaimplementować bazę danych SQLite w aplikacji sieci web MVC ASP.NET Core.
Należy pamiętać, że istnieje kilka sposobów, aby ustawić parametry połączenia do bazy danych, jak korzystać z kontekstu i że EntityFramework 7 jest nadal prerelease

6

Jeśli chcesz utworzyć aplikację internetową ASP.NET rdzenia przy użyciu SQLite w przypadku bazy danych bardzo polecam użycie aplikacji Yeoman do skonfigurowania aplikacji. Najpierw musisz zainstalować .NET Core 1.1 SDK (Visual Studio 2015 wydaje się zawierać tylko wersje SDK 1.0.0 i 1.0.1 w tej chwili). Następnie należy zainstalować Node.js, który jest dostarczany z npm, a następnie zainstalować następujące pakiety npm: yo i generator-aspnet. Następnie wystarczy uruchomić yo aspnet i odpowiedzieć na kilka pytań.

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 

Następnie otrzymasz następującą odpowiedź:

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 

Uruchom dotnet restore, dotnet ef database update, a następnie dotnet run i przejdź do localhost:5000 aby upewnić się, że projekt jest uruchomiony.

Teraz możesz otworzyć projekt w Visual Studio 2015 (zakładając, że jesteś w systemie Windows) lub Visual Studio Code.

ASP.NET Core web application generated using Yeoman

Wspaniałą rzeczą jest to, że Startup.cs, project.json i appsettings.json pliki są ustawione w użyciu SQLite. Ponadto, baza danych SQLite jest stworzony dla Ciebie:

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

Twoja baza danych SQLite będzie znajdować się pod numerem bin/Debug/netcoreapp1.0. W moim przypadku jest on zlokalizowany pod numerem C:\Development\WebApplication\bin\Debug\netcoreapp1.0\WebApplication.db

Jeśli chcesz zmienić nazwę bazy danych SQLite, zmodyfikuj plik appsettings.json i uruchom dotnet ef database update.

Aby dowiedzieć się więcej na temat korzystania z bazy danych SQLite EF .NET Core i Core sprawdzić ten artykuł: .NET Core - New Database

+0

Podany ramową „Microsoft.NETCore.App”, wersja „1.1.0” nie została znaleziona. Teraz potrzebuje 1.1.0 - generator yo aspnet łamie wsteczną zgodność z wersją 1.0.1 .. – hB0

+1

Jeśli zamierzasz używać Visual Studio z Yeomanem, masz 2 opcje: 1) [pobierz .NET Core 1.1 SDK ] (https://www.microsoft.com/net/core#windowscmd) i [zaktualizuj NuGet do wersji beta] (http://docs.nuget.org/ndocs/guides/install-nuget#nuget-beta-channel) . 2) Ręcznie edytuj 'pakiet.json' i zmień" 1.1.0-preview4-final "na" 1.0.0-preview2-003131 "(a także zmień" 1.1.0 "na" 1.0.1 "). 'global.json', upewnij się, że sdk.version jest nadal" 1.0.0-preview2-003131 ", niezależnie od tego, jaki wybierzesz.MS usunie' pakiet.json' na rzecz '.csproj', więc jest to konieczne do rozpoznania 'pakiet.json' – kimbaudi