В моей первоначальной настройке кода я предпочитаю не позволять потребителю (в данном случае веб-странице) иметь возможность отбрасывать и воссоздавать базу данных даже во время разработки, опасаясь, что позже я могу забыть добавить соответствующую логику и снимать Я в ногу (для создания пользователей базы данных с соответствующими разрешениями, прежде чем начать работу). Поэтому этот сайт имеет три проекта, связанных с решением:
Код Первый проект , который содержит POCO и инициализаторы. Существует два различных способа создания экземпляра DbContext: один устанавливает Database.SetInitializer
на инициализатор, который наследуется от CreateDatabaseIfNotExists<MyContext>
, а другой - на DropCreateDatabaseAlways<PanelisternaDbContext>
. Таким образом, я не получаю никаких скрытых выпадений и повторного создания, и, надеюсь, даже если позже я каким-то образом испорчу права доступа к базе данных, код на стороне сервера не помешает и начнёт удалять вещи.
Веб-страница проекта или вообще любой потребитель. Идея в том, что я создаю MyContext здесь, который не удаляет базу данных - никогда.
Сбросить проект , консольное приложение, которое фактически отбрасывает и воссоздает все. Он даже просит ввести некоторую проверку, поэтому я не запускаю ее случайно.
Итак, пока все отлично. За исключением того, что я не знаю, как на самом деле удалить и воссоздать базу данных, не помещая в нее ничего. То есть следующий код делает то, что я хочу:
using (var myContext = MyDbContext.GetContext("connectionString", true))
//The trailing 'true' marks that the database is to be dropped and recreated.
{
var user = new User {};
myContext.Users.Add(user);
myContext.SaveChanges();
myContext.Users.Remove(user);
myContext.SaveChanges();
}
Как видите, я добавляю и удаляю объект User
, так что SaveChanges()
действительно имеет какое-то отношение. Если я просто сделаю SaveChanges()
, база данных не будет удалена / воссоздана.
Итак, без лишних слов, я ищу более чистый метод для восстановления базы данных, а также любые комментарии или мысли по поводу этого решения на основе сброса.