Database first: Entity Framework создает набор классов, которые отражают модель конкретной базы данных
Model first: сначала разработчик создает модель базы данных, по которой затем Entity Framework создает реальную базу данных на сервере.
Code first: разработчик создает класс модели данных, которые будут храниться в бд, а затем Entity Framework по этой модели генерирует базу данных и ее таблицы
Пример. Модель:
// Модель
public class Car
{
public int CarId { get; set; }
public string Model { get; set; }
public int Year { get; set; }
public string Manufacturer { get; set; }
}
Контекст для работы с БД
public class Parking : DbContext
{
public DbSet Cars { get; set; }
public Parking()
: base()
{
}
// Конструктор для использования на уже открытом соединении
public Parking(DbConnection existingConnection, bool contextOwnsConnection)
: base(existingConnection, contextOwnsConnection)
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity().MapToStoredProcedures();
}
}
public static void ExecuteExample()
{
string connectionString = "server=localhost;port=3305;database=parking;uid=root;";
using (MySqlConnection connection = new MySqlConnection(connectionString)) {
using (Parking contextDB = new Parking(connection, false)) {
contextDB.Database.CreateIfNotExists();
} connection.Open();
MySqlTransaction transaction = connection.BeginTransaction();
try { // DbConnection that is already opened
using (Parking context = new Parking(connection, false)) {
// Interception/SQL logging
context.Database.Log = (string message) => { Console.WriteLine(message); };
// Passing an existing transaction to the context
context.Database.UseTransaction(transaction);
// DbSet.AddRange
List cars = new List();
cars.Add(new Car { Manufacturer = "Nissan", Model = "370Z", Year = 2012 });
cars.Add(new Car { Manufacturer = "Ford", Model = "Mustang",Year = 2013 });
cars.Add(new Car { Manufacturer ="Chevrolet",Model ="Camaro",Year = 2012});
cars.Add(new Car { Manufacturer = "Dodge", Model ="Charger",Year = 2013 });
context.Cars.AddRange(cars);
context.SaveChanges();
}
transaction.Commit();
}
catch {
transaction.Rollback();
throw;
}
}
}