Я столкнулся с проблемой при создании моего веб-приложения. Моя цель - создавать базу данных каждый раз, когда я запускаю свое приложение. Вот как я это делаю. Класс моего контекста:
namespace MyWebApplication.Data
{
public class MediaPlayerContext : DbContext
{
public DbSet<TrackEntity> TrackContextEntities { get; set; }
public DbSet<AlbumEntity> AlbumContextEntities { get; set; }
public DbSet<ArtistEntity> ArtistContextEntities { get; set; }
public DbSet<BandEntity> BandContextEntities { get; set; }
public MediaPlayerContext(DbContextOptions<MediaPlayerContext> options) : base(options)
{
MediaPlayerInitializer.Initialize(this);
}
}
}
Класс инициализатора:
namespace MyWebApplication.Data
{
public class MediaPlayerInitializer
{
public static void Initialize(MediaPlayerContext context)
{
context.Database.EnsureDeleted();
context.Database.EnsureCreated();
ArtistEntity DevonPortielje = new ArtistEntity()
{
Name = "Devon Portielje"
};
//... at this part of code I create all my Artists, Bands, Tracks and Albums
context.ArtistContextEntities.Add(DevonPortielje);
context.SaveChanges();
}
}
}
Затем я использую класс репозитория для управления
public class Repository<TEntity> : IRepository<TEntity> where TEntity : BaseEntity
{
private readonly DbSet<TEntity> contextDbSet;
public Repository(MediaPlayerContext context)
{
contextDbSet = context.Set<TEntity>();
}
//... some Repository methods
моего DbSet и единицей работы, чтобы обернуть мою Репозитории
public class UnitOfWork : IUnitOfWork
{
private readonly MediaPlayerContext context;
public IRepository<AlbumEntity> AlbumRepository { get; }
public IRepository<ArtistEntity> ArtistRepository { get; }
public IRepository<BandEntity> BandRepository { get; }
public IRepository<TrackEntity> TrackRepository { get; }
public UnitOfWork(MediaPlayerContext context, IRepository<AlbumEntity> albums,
IRepository<ArtistEntity> artists, IRepository<BandEntity> bands,
IRepository<TrackEntity> tracks)
{
this.context = context;
AlbumRepository = albums;
ArtistRepository = artists;
BandRepository = bands;
TrackRepository = tracks;
}
public void Save()
{
context.SaveChanges();
}
}
И после всего этого я использую Единицу работы в своих сервисах Business Logi c, например,
public class BandService : IBandService
{
readonly IUnitOfWork UnitOfWork;
public BandService(IUnitOfWork unitOfWork)
{
UnitOfWork = unitOfWork;
}
//... Service methods
И, наконец, я использую эти Сервисы в моем контроллере:
public class MediaPlayerController : Controller
{
IBandService BandService;
IAlbumService AlbumService;
ITrackService TrackService;
public MediaPlayerController(IBandService bandService, IAlbumService albumService,
ITrackService trackService)
{
BandService = bandService;
AlbumService = albumService;
TrackService = trackService;
}
//... Controller ActionResult Methods that return Views
Я добавляю свой контекст в коллекцию служб в файле Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<MediaPlayerContext>(opt =>
opt.UseSqlServer(Configuration.GetConnectionString("MediaPlayerDatabase")));
//...
Проблема в том, что каждый раз, когда открывается новый вид, создается новая база данных из-за этих строк в моем Метод Initialize.
context.Database.EnsureDeleted();
context.Database.EnsureCreated();
Но я не могу найти какой-либо другой возможный способ создания моей базы данных (SetInitializer больше не доступен), и никакие изменения в моей базе данных никогда не будут отражены, поскольку она всегда удаляется и создается заново. , Что я делаю? Заранее спасибо.