【问题标题】:How to Change the Schema name如何更改架构名称
【发布时间】:2011-11-22 09:19:16
【问题描述】:

我正在开发一个使用 EF 4.1 Code First 的 ASP.NET MVC 应用程序。

我必须将默认模式名称 (dbo) 更改为另一个名称。

我试过了:

public string SchemaName;

public void MyContext()
{
    SchemaName = GetSchemaName();
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<Account>().ToTable("TB_ACC_HOLDERS", SchemaName);
}

但它不起作用。当我获得一个新的 Context 实例并调用我的一些表时.. 生成的查询仍然具有“dbo”模式名称。

有人有解决这个问题的想法吗?

【问题讨论】:

  • 您需要对上下文中的每个实体进行配置更改 - 这不是全局设置。否则,你做对了。
  • 我这样做了,但它不起作用:-(
  • 你的覆盖OnModelCreating中有base.OnModelCreating(modelBuilder);吗?
  • 我做得很好。我放了一个 SYSTEM 模式,它起作用了。你最初是用 dbo 生成数据库,然后再切换吗?也许它无法检测到架构更改作为删除数据库的原因。
  • 经过硬调试..我发现了错误。运行 OnModelCreating 时,我的变量正在 DataContext 的构造函数中启动,到达属性为空。 :-(

标签: c# asp.net-mvc entity-framework ef-code-first


【解决方案1】:

在调试模式下几个小时后,我得到了错误。

在构造函数中,我在 connectionString 上获取模式名称并将属性 (schemaName) 设置为值。

但是,当执行获得 OnModelCreating() 方法时,我的 schemaName 属性被设置为 NULL,谁知道为什么。

然后我将 schemaName 变量固定在方法的代码中。当我这样做时,一切都是正确的。

谢谢大家!

这里是代码:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    //It works fine
    var schemaName = "SYSTEM";
    modelBuilder.Entity<Account>().ToTable("TB_ACC_HOLDERS", schemaName);
}

【讨论】:

  • 我正在使用此代码连接到 Oracle 数据库,而不使用 DevArt 连接器。很难,但也不是不可能!稍后我将发布所有代码! :)
猜你喜欢
  • 2013-09-14
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多