c# - topshelf 卸载命令不删除 EF 数据库
问题描述
我有一个基本的控制台应用程序服务,它有 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
方法创建数据库并插入人员记录,这里我使用 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(); });
,但未删除数据库?
在服务停止时,相同的代码工作正常,数据库删除也可以。请建议。
解决方案
推荐阅读
- java - 无法从另一个活动传递值(仅传递空值)
- python-3.x - 计算句子中的字母(Python)
- java - 如何将 setContentView(View view) 方法移动到片段
- html - 我想要一个高度相同的 img 旁边的 div,同时使用 100% 的页面宽度
- sml - SML NJ 中的 insertSorted 比较函数
- python - 从数据框中删除特定字符串
- parsing - 无法为递归下降解析器获得 LL(1) 形式的语法
- javascript - 通过 jest 测试一个类时,它是否处理导入?
- azure-devops - 如何从 YAML 文件传递 Azure ARM 模板对象值?
- c# - Azure Functions V1 用户机密