首页 > 解决方案 > topshelf 卸载命令不删除 EF 数据库

问题描述

我有一个基本的控制台应用程序服务,它有 2 种方法StartStop并使用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方法创建数据库并插入人员记录,这里我使用 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(); });or处添加删除数据库代码configure.AfterUninstall(() => { DeleteDatabase(); });,但未删除数据库?

在服务停止时,相同的代码工作正常,数据库删除也可以。请建议。

标签: c#entity-frameworktopshelf

解决方案


推荐阅读