gpt4 book ai didi

c# - 在不添加任何数据的情况下重新生成 Code-First 数据库

转载 作者:太空狗 更新时间:2023-10-30 00:16:28 25 4
gpt4 key购买 nike

在我的代码优先设置中,我宁愿不允许消费者(在本例中是网页)即使在设计时也能够删除和重新创建数据库,因为担心我可能会忘记稍后添加适当的逻辑并拍摄我自己在脚下(在上线之前创建具有适当权限的数据库用户的效果)。因此,该网站有三个与解决方案相关的项目:

  • Code First 项目,其中包含 POCO 和初始化器。创建 DbContext 实例有两种不同的方法,一种设置 Database.SetInitializer到继承自 CreateDatabaseIfNotExists<MyContext> 的启动器另一种方式是使用 DropCreateDatabaseAlways<PanelisternaDbContext> .这样我就不会得到任何偷偷摸摸的删除和重新创建,并且希望即使我以后以某种方式弄乱了数据库用户权限,服务器端代码也不会发疯并开始删除东西。

  • 网页项目,或者通常是任何类型的消费者。我的想法是,我在这里创建 MyContext,它永远不会删除数据库。

  • Reset Project,这是一个控制台应用程序,它实际上确实删除并重新创建了所有内容。它甚至要求我输入一些验证信息,所以我不会无意中运行它。

到目前为止,一切都很好。除了我不知道如何在不放入任何内容的情况下实际删除和重新创建数据库。 IE。下面的代码做我想要的:

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()数据库不会删除/重新创建。

所以,事不宜迟,我正在寻找一种更简洁的方法来实现数据库重建,以及对此基于重置的解决方案的任何评论或想法。

最佳答案

在您的控制台应用程序中,您可以放置​​以下内容:

Database.SetInitializer(new DropCreateDatabaseAlways<MyDbContext>());         
using (var myContext = MyDbContext.GetContext("connectionString"))
{
context.Database.Initialize(force: true);
}

这应该强制删除并重新创建,如果需要,您可以使用自定义初始化程序来创建一些初始数据。

关于c# - 在不添加任何数据的情况下重新生成 Code-First 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6983609/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com