我决定在这个阶段使用int
而不是DateTime
。我用add-migration
创建了一个迁移,但失败了,并说我必须手动运行CONVERT
命令。我不懂SQL Server,所以我去了Visual Studio Server Explorer并使用表设计工具将值更改为int
并运行Update
。它成功了,但是,当我尝试将某些内容保存到我的数据库中时,它会抛出错误:
System.Data.SqlClient.SqlException:"无法删除数据库"AppDbContext",因为它当前正在使用中。
我手动删除了位于App_Data
文件夹中的数据库文件并重建了我的应用程序,但发生了相同的错误。当我使用设计工具检查表结构时,它反映了我的更改 - 所需的列现在int
而不是DateTime
。
这是访问数据库的代码:
db.Contests.Add(contest);
Contests
确实是我更改的表,但数据库结构似乎没问题。我不明白为什么它会尝试删除数据库。我该如何解决它?
总结
修改表时始终在数据库级别工作 - 我安装并使用了SQL Server Managment Studio,并成功地更改了更改表。
错误
根据我的Cannot drop Database
错误,它发生了,因为我的DbInitiallizer
类设置为每次更改模型时删除并重新创建数据库。我删除了该设置,而是将其配置为仅在数据库不存在时才创建数据库。之后,我需要做的就是运行迁移,通知EF
所有表现在都已修改以反映我的模型并且它有效。
更改表列属性的简单步骤:
- 进行所需的模型更改。
- 使用SQL Server Management Studio或类似的数据库级工具修改表列
- 在 Visual Studio 中的程序包管理器控制台工具中运行
add-migration <Name>
和update-database
- 完成:)