Take a note of the key you've given for your connection string. In the above example, I've stated the key of my connection string as "CinemaDbContext".
// CinemaDbContext.cs
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using System;
namespace EFMigrations
{
public partial class CinemaDbContext : DbContext
{
public virtual DbSet<FilmEntity> Films { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json")
.Build();
optionsBuilder.UseSqlServer(configuration.GetConnectionString("CinemaDbContext"));
}
}
}
Creating Entities for your DbContext
The next job is to create entities for your DbContext. Typically, it's common practice for entities to match the layout of your database tables. Above all, it will keep the naming between your application and database consistent. The entity class represents the table, and the properties inside your entity represent the columns.
// CinemaDbContext.cs
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using System;
namespace EFMigrations
{
public partial class CinemaDbContext : DbContext
{
public virtual DbSet<FilmEntity> Films { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
IConfigurationRoot configuration = new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json")
.Build();
optionsBuilder.UseSqlServer(configuration.GetConnectionString("CinemaDbContext"));
}
protected override void OnModelCreating(ModelBuilder builder)
{
FilmEntity.OnModelCreating(builder.Entity<FilmEntity>());
}
}
}
// FilmEntity.cs
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace EFMigrations
{
public partial class FilmEntity
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual int CreatedYearId { get; set; }
public virtual YearEntity CreatedYear { get; set; }
public static void OnModelCreating(EntityTypeBuilder<FilmEntity> builder)
{
builder
.HasOne(film => film.CreatedYear)
.WithMany(createdYear => createdYear.CreatedFilms)
.OnDelete(DeleteBehavior.NoAction)
.HasPrincipalKey(createdYear => createdYear.Year)
.HasForeignKey(film => film.CreatedYearId);
}
}
}
// YearEntity.cs
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace EFMigrations
{
public partial class YearEntity
{
[Key]
public virtual int Year { get; set; }
public virtual ICollection<FilmEntity> CreatedFilms { get; set; }
}
}