如何更改架构名称

6

我正在开发一个使用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);
}

但是它没有起作用。当我获得我的上下文的一个新实例并调用一些表时,生成的查询仍带有“dbo”模式名称。

有人有解决方法吗?


你需要为上下文中的每个实体进行配置更改 - 这不是全局设置。否则,你做得很对。 - Yuck
我尝试了,但是不起作用 :-( - yanborowski
1
你在重写的 OnModelCreating 方法中有 base.OnModelCreating(modelBuilder); 吗? - Yuck
我能够很好地完成这个任务。我将系统的模式打开,它就起作用了。你最初是用dbo生成数据库然后再切换的吗?也许它无法检测到模式更改导致删除数据库的原因。 - Dismissile
经过艰苦的调试,我找到了错误。当运行OnModelCreating时,我的变量在DataContext的构造函数中被启动,导致该属性为空。 :-( - yanborowski
1个回答

5
在调试模式下,经过一些时间后,我得到了一个错误。
在构造函数中,我从连接字符串中获取了模式名称,并将该属性(schemaName)设置为该值。但是,在执行OnModelCreating()方法时,我的schemaName属性被设置为空,谁知道为什么。然后我将schemaName变量固定在代码中的方法中。这么做之后一切正常。
感谢大家!
以下是代码:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    //It works fine
    var schemaName = "SYSTEM";
    modelBuilder.Entity<Account>().ToTable("TB_ACC_HOLDERS", schemaName);
}

我正在使用这段代码连接到 Oracle 数据库,而不使用 DevArt 连接器。虽然有些困难,但并非不可能!稍后我将发布完整的代码! :) - yanborowski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接