1

Пытаясь использовать Entity Framework 7 RC1, я увидел, что пакет nuget включает файлы gazillon (на самом деле 171 файл, 130 папок), которые я не хочу проверять в своем исходном элементе управления.Добавить-Миграция без пакета nuget?

Я стараюсь использовать минимальный подход и использовать и проверять только те вещи, которые я использую. Таким образом, я смог получить использование dll до 3 dlls Core, Relational and Sqlite.

Итак, основной материал EF будет работать с ними, и все будет хорошо. Но теперь мне нужны миграции, поэтому я должен повторно получить этот пакет nuget с gazillion dlls/scripts, чтобы запустить "Add Migration".

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

Пожалуйста, не отвечайте «почему вы не хотите использовать nuget» или «nuget is the future» или что-то в этом роде.

+1

Файлы NuGet по умолчанию хранятся в каталоге «пакеты» за пределами папки проекта, поэтому им не нужно проверять исходный элемент управления; если каталог пакетов не находится на компьютере при первом создании, тогда NuGet загрузит соответствующие пакеты, поэтому не использовать его для сохранения при проверке контроля исходного кода является проблемой без проблем. – Claies

+0

@Claies, о том, что я не хочу, чтобы он загружал пакет nuget при развертывании или имел какую-либо ссылку на что-либо в Интернете. – sprocket12

+0

, то вы не можете использовать миграции. Процесс миграции - очень сложный процесс, который анализирует вашу базу данных, ваши модели, создает базовый код для методов вверх/вниз, управляет таблицей __migrationHIstory и т. Д. Попытка сделать это вручную будет очень подвержена ошибкам, и в этот момент вам лучше было бы просто использовать SQL Management Studio для создания требуемых таблиц. – Claies

ответ

0

К счастью, @Claies неверен. Я могу использовать миграции без Nuget. Я проработал, и это не сложно.

Сборки Необходимого

18 узлов требуется (так как все они получили разделить на более модульный после 6.1). Их можно извлечь из пакета Nuget, который можно загрузить.

EntityFramework.Relational, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 
EntityFramework.Core, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 
EntityFramework.Sqlite, Version=7.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 
System.Interactive.Async, Version=1.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 
Microsoft.Extensions.Logging.Abstractions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 
Remotion.Linq, Version=2.0.0.0, Culture=neutral, PublicKeyToken=fee00910d6e5f53b 
System.Diagnostics.DiagnosticSource, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 
Microsoft.Extensions.DependencyInjection.Abstractions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 
Microsoft.Extensions.DependencyInjection, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 
Microsoft.Extensions.Caching.Abstractions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 
Microsoft.Extensions.OptionsModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 
Microsoft.Extensions.Logging, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 
Microsoft.Extensions.Caching.Memory, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 
Microsoft.Data.Sqlite, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 
Microsoft.Extensions.Primitives, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 
Microsoft.Extensions.Configuration.Abstractions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 
Microsoft.Extensions.Configuration.Binder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 
Microsoft.Extensions.PlatformAbstractions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 

__EFMigrations Таблица:

Нет необходимости беспокоиться об этом, так как EF сборки позаботиться о создании этого

скрипты

миграции

NuGet "Add-Migration" команда добавляет 3 файлов (миграция .cs, конструктор .cs & моментальный снимок), но на самом деле я обнаружил, что для миграции требуется только один.

Сначала создайте каталог под названием «Миграции». Затем поместите в него .cs файлы с такой структурой:

[DbContext(typeof(BloggingContext))] 
[Migration("151205_01")] 
public class InitialMigration : Migration 
{ 
    protected override void Up(MigrationBuilder migrationBuilder) 
    { 
     // create table, add columns/keys etc. 
    } 

    protected override void Down(MigrationBuilder migrationBuilder) 
    { 
     // opposite of "Up", ie. drop table 
    } 

    protected override void BuildTargetModel(ModelBuilder modelBuilder) 
    { 
     // can remain blank, not sure what its used for 
    } 
} 

Я думаю, его хорошо, чтобы назвать эти файлы, такие как «ггммдд-р-р», где г = ревизии, так что они всегда сортируются в порядке и работать в заказ.

Как применять миграции

Просто позвоните:

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

EF 7 не может сделать это на контекстной конкретизации, но это может быть сделано при запуске приложения. Если есть ожидающие миграции, они будут запущены.

Все.

Смежные вопросы