2

我首先将一个包含许多表和视图的小型数据库逆向工程到 EF 5 代码中。

当我这样做时,我会为我的每个表获得一组模型和映射类,当我尝试使用生成的DbContext.

它还为我的每个视图生成 POCO 类,但是当我运行Enable-MigrationsAdd-Migration使用包管理器控制台时,迁移不会重新创建 SQL Server 视图。

我尝试手动更新迁移以使用自定义 SQL 创建视图,如下所示:

Sql("CREATE VIEW [dbo].[viewUsersDeactivated] "
          + "AS "
          + "SELECT ... ");

这在我运行时工作正常Update-Database,但从Update-Database -Script命令输出的 SQL 脚本似乎无效,导致以下错误:

'CREATE VIEW' 必须是批处理中的唯一语句。

在每个自定义 SQL 语句之间插入Sql("GO");可用于脚本生成,但随后我无法再使用 更新Update-Database,并且我找不到适用于两者的方法。

所以我的问题归结为:如何在代码优先迁移脚本中包含 SQL Server 视图,以便我可以使用Update-Database和通过使用生成的生产脚本创建数据库Update-Database -Script

谢谢!

4

1 回答 1

5

不完全确定这是最佳实践,其他人可能有更好的解决方案,但我通过将整个视图创建脚本包装在 Execute 中解决了这个问题,因此:

var sql = "CREATE VIEW [dbo].[TheViewName] AS ......."
sql = sql.Replace("'", "''"); // sanitize the sql string
sql = string.Format("EXECUTE sp_executesql N'{0}'", sql);
Sql(sql);
于 2012-12-10T13:39:59.603 回答