C# 实体框架6似乎忽略了HasDefaultSchema

C# 实体框架6似乎忽略了HasDefaultSchema,c#,sql-server,entity-framework,entity-framework-6,schema,C#,Sql Server,Entity Framework,Entity Framework 6,Schema,我在一个网站上工作,在这个网站上,我们希望模式成为项目之间的区别,这样做可以确保项目之间的安全 我在数据上下文中使用了OnModelCreating中的hasdaultschema方法,但也必须使我的DbContext实现IDbModelCacheKeyProvider并实现CacheKey属性。它以前曾经奏效过。不幸的是,此解决方案似乎不一致,我当前遇到一个问题,即我试图更新模型,但在运行更新数据库时出现以下错误: The specified schema name "dbo" either

我在一个网站上工作,在这个网站上,我们希望模式成为项目之间的区别,这样做可以确保项目之间的安全

我在数据上下文中使用了
OnModelCreating
中的
hasdaultschema
方法,但也必须使我的
DbContext
实现
IDbModelCacheKeyProvider
并实现
CacheKey
属性。它以前曾经奏效过。不幸的是,此解决方案似乎不一致,我当前遇到一个问题,即我试图更新模型,但在运行
更新数据库时出现以下错误:

The specified schema name "dbo" either does not exist or you do not have permission to use it.
连接字符串的用户只能访问我的
xma
架构,因此如果我更改了架构,则此错误是有意义的,但您可以在以下代码中看到,我没有:

public class DataContext : DbContext, DbModelCacheKeyProvider
{
    public DataContext()
        //: base("name=DataContext")
        : base("DataContext")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        ...
        modelBuilder.HasDefaultSchema("xma");

        base.OnModelCreating(modelBuilder);
    }

    public virtual DbSet<Article> Articles { get; set; }
    public virtual DbSet<Author> Authors { get; set; }
    ...

    public string CacheKey
    {
        get { return Utility.SchemaPrefix ?? "xma"; }
    }
}
公共类DataContext:DbContext,DbModelCacheKeyProvider
{
公共数据上下文()
//:base(“name=DataContext”)
:base(“数据上下文”)
{
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
...
hasdaultschema(“xma”);
基于模型创建(modelBuilder);
}
公共虚拟数据库集项目{get;set;}
公共虚拟数据库集作者{get;set;}
...
公共字符串缓存密钥
{
获取{return Utility.SchemaPrefix???“xma”;}
}
}
这个问题也会发生在其他团队成员身上,因此任何帮助都将不胜感激

谢谢


编辑:我忘了提到,这似乎是一个干净数据库的问题。

我已经删除了对模型的挂起更改,并且能够按照Steve的建议运行
更新数据库-脚本,事实证明,初始迁移是基于dbo模式的,因此更改为具有更高权限的用户,并且能够继续重新创建数据库。很遗憾,我犯了错误。

执行“更新数据库-脚本”并查看dbo引用的位置。我刚刚尝试过,由于存在挂起的更改且自动迁移被禁用,因此出现错误
无法更新数据库以匹配当前模型。将挂起的模型更改写入基于代码的迁移或启用自动迁移。将DbMigrationsConfiguration.AutomaticMiggrationsEnabled设置为true以启用自动迁移。
然后我尝试添加迁移,但出现以下错误
无法生成显式迁移,因为以下显式迁移处于挂起状态:…
如果您没有走得太远,最好重置迁移。删除VS中的文件夹,删除数据库中的_MigrationHistory,启用迁移,添加迁移初始-忽略,更新数据库。