1

我成功创建了我的第一个使用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时那么优雅,而且我还没有发现有人建议您使用此方法。

所以,我错过了一些东西,有没有更简单,更优雅的方式来做到这一点?

回答

1

方法1和2预计该数据库尚不存在。如果您手动创建数据库,则它们不起作用。如果您需要EF在现有数据库中创建表格,则必须创建custom database initializer

相关问题