您可以使用FenixRepo库(也可作为nuget package)创建特定的表格,这是您的一部分Context
。首先,您应该在启动时调用一次static
Initialize
方法,其中第一个参数是工厂方法,它返回您的Context
的实例,第二个参数是Configuration
class
的实例。它将为您的所有表格准备SQL脚本,在Context
处注册。在ASP.NET MVC的情况下,它是一个很好的决定,将此代码粘贴到Global.asax中:
FenixRepositoryScriptExtractor.Initialize(() => new Context(), new Configuration());
然后你就可以创建所需的类型MyTable
这种简单的方式表:
var repo = new FenixRepositoryCreateTable<MyTable>();
//or repo = new FenixRepository<MyTable>();
repo.CreateTable();
而且,如果你的表格在多个迁移之间传播,并且他们没有任何东西与其他表格相对应,则可以通过FenixAttribute
指定这些迁移(即迁移文件夹中的类别名称),并且它们将被用作SQL脚本的来源,用于创建表格:
[Fenix(nameof(Initial), nameof(MyTableFirstMigration), nameof(MyTableSecondMigration))]
public class MyTable
{
//some stuff
}
没有此属性,库将使用默认脚本。指定迁移总是比较好,因为否则不能保证所有索引都将创建,并且在迁移过程中,您可以包含一些自定义代码,在默认解决方案的情况下不会执行。
库在MS SQL的情况下与EF 6.1.3兼容和测试。
嗯,我想如果没有初始数据库连接到连接字符串,我想什么?我只是从它删除最初的目录片断并收到相同的无效对象名称'dbo.Movies'错误。 – Pieces 2012-03-26 14:31:46
连接字符串告诉它在哪里创建数据库。它不一定存在。它会检测到它不存在,然后尝试创建它,如果它不存在。只要它具有正确的权限,一切都会创建正常。我想如果你删除数据库并保留相同的连接字符串,那么一切都将以你想要的方式工作。 – Dismissile 2012-03-26 14:33:23
哦,非常感谢你!最后一个问题是,您建议将Database.SetInitializer放在哪个方法中。我得到一个错误,它无法删除数据库,因为它正在使用中。我会通过应用程序来推测它的自我。再次感谢,我的朋友和我花了很多时间寻找解决问题的方法,并且从来不会猜测数据库不应该被创建。 – Pieces 2012-03-26 14:38:07