Подтвердить что ты не робот

SQLite в ядре ASP.NET с EntityFrameworkCore

Как добавить и использовать базу данных SQLite в веб-приложении ASP.NET Core, используя EntityFramework 7?

Я погрузился в ASP.NET Core в тот момент, когда узнал об этом, и создал свое первое веб-приложение, у меня неожиданно появилось множество данных, которые я хотел сохранить, и SQLite казался очевидным выбором.
Поскольку я хотел, чтобы он остался с моим приложением, держите его легким, простым и не создавайте отдельную базу данных.

Итак, как можно было бы создать базу данных SQLite в ядре ASP.NET?

  • ASP.NET Core - теперь ранее известный как ASP.NET MVC 6
  • EntityFramework Core - теперь ранее известный как EntityFramework 7
4b9b3361

Ответ 1

Обновление: 4 ноября 2016 года.
Переформатирование - картинки для примеров кода.
Info: Имейте в виду, что в некоторых примерах кода код, созданный шаблоном визуальной студии, был опущен.

Обновление: 11 июля 2016 года.
.NET Core и EntityFrameWork Core версии 1.0 на нас!
Так что это руководство заслуживает небольшого обновления

Шаг 1:
Создайте свое приложение. введите описание изображения здесь

Шаг 2:
Получить необходимые пакеты
Microsoft.EntityFrameworkCore 1.0.0
Microsoft.EntityFrameworkCore.SQlite 1.0.0

Шаг 3:
Создайте свой контекст:
(Контекст будет классом, который вы создаете)

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

Шаг 4:
Добавьте свой контекст в свои службы:
(Находится в вашем классе Startup)

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

Шаг 5:
Создайте свою базу данных при запуске, добавив ее в метод запуска

(Находится в классе Startup)

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

Эт Войла!
Теперь вы сможете использовать SQLite в своих основных приложениях ASP.NET.
Старое руководство по-прежнему применяется в отношении того, как вы создаете свои модели, а также используете контекст базы данных.


Обновление: 28 мая 2016 года.
Выпущен .NET Core RC2 и EntityFramework Core RC1.
Они улучшили и упростили шаги по настройке SQLite.
Но я испытываю некоторые проблемы с этим и не могу реплицировать его из-за ошибки с библиотекой Newtonsoft.Json и NuGet.

Я рекомендую придерживаться библиотек RC1, если вы хотите сделать это, пока!


Шаг 1:
Создайте веб-приложение ASP.NET

ASP.NET5WebApp

Шаг 2:
Перейдите в Инструменты → Nuget Packet Manager → Управление пакетами Nuget для решения.
Найдите EntityFramework.SQLite и установите флажок Include prelease.
Установите пакет

NugetEF7Sqlite

Шаг 3: Создание контекста
Создайте класс контекста для своей базы данных.
Назовите это, как хотите, но отпустите что-то, что обычно, например MyDbContext. Сделайте свой новый класс наследующим классом DbContext и переопределите метод OnConfiguring и определите свое соединение следующим образом:

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

Шаг 4:
Перейдите к Startup.cs и убедитесь, что ваша база данных создана в начале вашего веб-приложения:

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

    }

Во-вторых, нам нужно добавить службу:

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

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

Шаг 5: Определение ваших моделей
Создайте свои модели и перейдите в MyDbContext.cs и добавьте новое свойство для каждой из ваших новых моделей (учитывая, что вам нужна таблица для каждого!)
Вот пример:
Моя модель:

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

    public string Title { get; set; }

    public string Description { get; set; }

    public string UrlSlug { get; set; }
}

Добавление его в мой контекст:

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

Шаг 6: Использование контекста
Перейдите в свой HomeController и добавьте новое поле в контроллер.
private readonly MyDbContext _myDbContext = new MyDbContext();
И используйте его в ActionResult, передав его возвращенному представлению: (Теперь предположим, что у нас есть категория в нашей базе данных)

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

Итак, перейдя на ваш индекс, вы можете использовать наши мнимые данные из базы данных. Определив модель в верхней части вашего представления так:

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


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

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

Теперь, запустив наше веб-приложение и перейдем к назначенному адресу, мы увидим страницу html по умолчанию с фэнтезийным заголовком начальной загрузки, показывая это на странице:
веб-страница

Вторая строка - это (или будет) название нашей первой категории в нашей базе данных.

Документация Entity Framework 7

Это мой первый Q & A - если у вас есть какой-либо ввод или что-то, что нужно уточнить, не стесняйтесь комментировать.
Это очень простой пример того, как реализовать базу данных SQLite в веб-приложении ASP.NET Core MVC.
Обратите внимание, что существует несколько способов установить строку подключения для базы данных, как использовать контекст и что EntityFramework 7 все еще является предварительным предложением

Ответ 2

Если вы хотите создать веб-приложение ASP.NET Core с использованием SQLite для базы данных, я настоятельно рекомендую использовать Yeoman, чтобы поднять приложение для вас. Сначала вам нужно установить .NET Core 1.1 SDK (Visual Studio 2015, похоже, включает только версии SDK 1.0.0 и 1.0.1), Затем вам нужно установить Node.js, который поставляется с npm, а затем установить следующие пакеты npm: yo и generator-aspnet. Затем все, что вам нужно сделать, - запустить yo aspnet и ответить на несколько вопросов.

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 the name of your ASP.NET application? WebApplication

Затем вы получите следующий ответ:

 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 run)
    dotnet ef database update (to create the SQLite database for the project)
    dotnet run

Запустите dotnet restore, dotnet ef database update, а затем dotnet run и перейдите к localhost:5000, чтобы убедиться, что проект запущен.

Теперь вы можете открыть проект в Visual Studio 2015 (если вы в Windows) или Visual Studio Code.

Веб-приложение ASP.NET Core, созданное с помощью Yeoman

Самое замечательное в том, что файлы Startup.cs, project.json и appsettings.json настроены на использование SQLite. Кроме того, для вас создана база данных SQLite:

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

Ваша база данных SQLite будет расположена в bin/Debug/netcoreapp1.0. В моем случае он находится в C:\Development\WebApplication\bin\Debug\netcoreapp1.0\WebApplication.db

Если вы хотите переименовать базу данных SQLite, измените файл appsettings.json и запустите dotnet ef database update.

Чтобы узнать больше об использовании базы данных SQLite с .NET Core и EF Core, ознакомьтесь с этой статьей: .NET Core - новая база данных