【问题标题】:Setting schema name for DbContext为 DbContext 设置架构名称
【发布时间】:2015-08-11 07:05:20
【问题描述】:

我知道如何在我的上下文中为表设置架构,但是有没有办法为上下文中的所有表设置默认架构? 即

[Schema = "Ordering"] 
public class MyContext:DbContext
{
    public MyContext()
        : base("name=ConnectionString")
    {
    }

    public DbSet<Student> Students { get; set; }
}

【问题讨论】:

    标签: c# entity-framework entity-framework-6 database-schema


    【解决方案1】:

    您可以在自定义继承的 DbContext 类的 OnModelCreating 方法中配置默认​​架构,例如 -

    public class MyContext: DbContext 
            {
                public MyContext(): base("MyContext") 
                {
                }
    
                public DbSet<Student> Students { get; set; }
    
                protected override void OnModelCreating(DbModelBuilder modelBuilder)
                {
                    //Configure default schema
                    modelBuilder.HasDefaultSchema("Ordering");
                }
            }
    

    从 EF6 开始,您可以使用 DbModelBuilder 上的 HasDefaultSchema 方法来指定要用于所有表、存储过程等的数据库架构。对于您明确配置不同架构的任何对象,此默认设置将被覆盖。

    【讨论】:

    • 当我尝试设置“HasDefaultSchema”时,我收到此错误 - 支持 '' 上下文的模型自创建数据库以来已更改。考虑使用 Code First 迁移来更新数据库。你知道如何解决它或者是什么原因?
    • @AchuthaKrishnan 解决您需要更新迁移的问题。这是一个很好的tutorial。在 cmd 提示符下运行:dotnet ef database update
    • 即使 EF6 也无法正常工作。每当我实例化上下文时,不会调用 OnModelCreating 函数,知道吗?
    • 仍然使用默认的公共架构
    • ohhh 好的,这里有很多细节,您的迁移不会重新运行,创建它们的默认架构很重要。
    猜你喜欢
    • 2019-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 2018-06-30
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    相关资源
    最近更新 更多