Ответ
Code First — это подход разработки, при котором вы сначала пишете классы сущностей на C#, а Entity Framework автоматически создает или обновляет схему базы данных на основе этих классов. Database First — противоположный подход: вы начинаете с существующей базы данных, а EF генерирует соответствующие классы сущностей и контекст данных.
Основные различия
- Направление: Code First — от кода к БД. Database First — от БД к коду.
- Контроль: В Code First вы полностью контролируете модель через код. В Database First схема управляется в БД, а код является её отражением.
- Миграции: Code First имеет встроенную систему миграций для эволюции схемы БД. В Database First для обновления модели обычно требуется обновить EDMX-диаграмму или повторно выполнить скаффолдинг.
Пример Code First
// 1. Определяем класс сущности
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
public List<Post> Posts { get; set; }
}
// 2. Определяем контекст данных
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
}
// 3. EF создаст базу данных и таблицу 'Blogs' при первом обращении
using (var db = new BloggingContext())
{
db.Blogs.Add(new Blog { Url = "http://example.com" });
db.SaveChanges();
}
Пример Database First
Для существующей базы данных вы используете команду Scaffold-DbContext в Package Manager Console:
Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Эта команда сгенерирует классы Blog и BloggingContext на основе таблиц в указанной базе данных.
Когда что использовать?
- Code First: Идеален для новых проектов, где вы хотите использовать систему контроля версий для схемы данных (миграции) и предпочитаете работать преимущественно с кодом.
- Database First: Подходит при работе со сложной, уже существующей базой данных или когда схема БД управляется отдельной командой администраторов.