Команда topshelf uninstall не удаляет базу данных EF - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть базовая c консольная служба приложений, которая имеет 2 метода Start и Stop и запускает ее как оконную службу, используя Topshelf.

 public class MyService
{
    public void Start()
    {
        using (var db = new PersonDbContext())
        {
            var person = new Person
            {
                LastName = "test",
            };

            db.Persons.Add(person);
            db.SaveChanges();
        }
    }
    public void Stop()
    {
        //var context = new PersonDbContext();
        //context.Database.Delete();
    }
}

Здесь Start метод create базу данных и вставьте запись человека, здесь я использую EF Code First. Это означает, что при установке службы с использованием Topshelf и ее запуске создается база данных.

 HostFactory.Run(configure =>
        {
            configure.Service<MyService>(service =>
            {
                service.ConstructUsing(s => new MyService());
                service.WhenStarted(s => s.Start());
                service.WhenStopped(s => s.Stop());
            });
            //Setup Account that window service use to run.  
            configure.RunAsVirtualServiceAccount();
            configure.SetServiceName("MyWindowServiceWithTopshelf");
            configure.SetDisplayName("MyWindowServiceWithTopshelf");
            configure.SetDescription("My .Net windows service with Topshelf");

            configure.BeforeUninstall(() => { DeleteDatabase(); });
        });


 private static void DeleteDatabase()
    {
        var context = new PersonDbContext();
        context.Database.Delete();
    }

База данных успешно удаляется при добавлении кода удаления базы данных по методу Stop, означает, что служба остановлен.

Но я хочу удалить базу данных в процессе удаления службы. Я пытаюсь добавить код удаления базы данных на configure.BeforeUninstall(() => { DeleteDatabase(); }); или configure.AfterUninstall(() => { DeleteDatabase(); });, но база данных НЕ удаляется?

При остановке службы тот же код работает нормально, и удаление базы данных в порядке. Пожалуйста, предложите.

...