在我的代码优先的设置中,我宁愿不让消费者(在这种情况下是网页)能够在设计时删除并重新创建数据库,因为担心我可能会忘记稍后添加适当的逻辑并在脚下自我拍摄(以在创建数据库之前创建具有适当权限的用户)。因此,该网站已与解决方案相关的三个项目:重新生成代码 - 不添加任何数据的第一个数据库
代码第一个项目,其中包含波苏斯和初始化。创建一个DbContext实例有两种不同的方式,一种是将
Database.SetInitializer
设置为从CreateDatabaseIfNotExists<MyContext>
继承的initilizer,另一种方式是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()
数据库不会删除/重新创建。
所以,我没有进一步说明,我正在寻找一种更简洁的方法来实现数据库重新创建,以及对这种基于重置的解决方案的任何评论或想法。
正是我一直在寻找,保存为setinitilizer位,我更喜欢在上下文类中处理。谢谢! – Gleno