我成功创建了我的第一个使用SQL Server CE的实体框架代码第一个项目。数据库表是自动创建的,一切正常。在SQL Server 2008上设置实体框架代码第一个数据库
然后,我更改了连接字符串,指向我创建的SQL Server数据库,并期望它自动生成表。它没有,而是抱怨表不存在。
经过一番阅读后,我发现我需要为我的App_Start
方法添加一个初始化程序。
我想:
// Method 1
Database.SetInitializer(new DropCreateDatabaseIfModelChanges<EFContext>());
但这并没有在第一次工作,因为它无法找到一个EdmMetaData表发现,如果模型发生了变化。
所以我尝试添加:
// Method 2
Database.SetInitializer(new CreateDatabaseIfNotExists<EFContext>());
但这并没有工作,因为我已经创建了数据库,当我删除的数据库它仍然没有工作,因为我是在注销用户因为没有创建数据库特权。
我终于尝试:
// Method 3
Database.SetInitializer(new DropCreateDatabaseAlways<EFContext>());
这工作,但我真的不希望每次都砸分贝。所以一旦运行并添加EdmMetaData表,我用方法1替换它,现在工作正常。
尽管此方法有效,但它并不像我使用SQL Server CE时那么优雅,而且我还没有发现有人建议您使用此方法。
所以,我错过了一些东西,有没有更简单,更优雅的方式来做到这一点?