目前,我正在将我的应用程序部署到一个共享托管环境中,代码优先和迁移一直运行良好,只是有一个小问题.每次我想要推送站点时,我都必须使用"更新数据库-脚本"选项,因为我必须在每个表名前加上[dbo],因为默认情况下,共享主机会创建一个与数据库用户名相同的默认模式名.

如果我登录到共享主机并创建一个数据库,那么我必须创建一个用户.如果我将该用户命名为admin,那么代码在以admin身份登录时首先创建的表类似于"[admin].[BlogPosts]".当应用程序运行时,所有的表都会被创建,但我得到一个EF异常,因为它说"[dbo].[BlogPosts]"无效.如果我将表的模式名重命名为"[dbo]"而不是"[admin]",则会修复它.

为了解决这个问题,我必须生成一个手动执行的迁移脚本,并在所有表名之前添加"[dbo]",因为该脚本只按表名引用表,而不按表的模式和名称引用表.

有没有简单的方法来解决这个问题?如果我所要做的就是发布应用程序,然后一切正常,那就太好了.如果不是因为模式名的差异,它将是一个一键式部署,一切都会很美好.

推荐答案

可以使用ToTable方法指定模式名称.如果不指定模式名称,EF将按惯例使用dbo.

public class MyContext
{
    private string schemaName = "Foo";

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
         modelBuilder.Entity<MyEntity>().ToTable("MyTable", schemaName);
    } 
}

Sql相关问答推荐

我可以将INSERT语句与SELECT一起使用来创建条件吗?

使用来自不同深度的嵌套组的值执行计算的干净方法?

SQL:计算与另一列中给定值互斥的匹配项

编写一个SQL查询来返回收视率较高的类型,并取这些收视率的平均值,我该如何做呢?

值对于类型字符来说太长

PostgreSQL:按小时查看调整日期

有没有办法在Postgres中存储带有时区的时间戳,而不将其转换为UTC

导出部分条形码字符串GS1-128

根据Rails活动记录中时间戳/日期时间的时间部分从PostgreSQL中提取记录

如何将insert语句重复n次使一个值递增?

替换SQL Server XML中多处出现的 node 值

Postgres,使用 select 插入多个值

如何在 postgres 中旋转某些数据字段

SQL:无重复项的两个聚合函数

将表格和字符串连接以 for each 记录生成订单项目

As400 (IBM i) SQL 表 QSYS2.SYSTABLES 上的元数据

BigQuery - 将 TIMESTAMP 转换为 HH:MM:SS,然后识别 TIME_DIFF

SQL/Postgres:按日期和其他属性对相关性能进行分组

SQL:获取连接表的第一个项目

SQL中所有先前日期的累计总和