EF代码优先,Db所有者

本文关键字:Db 所有者 代码 EF | 更新日期: 2023-09-27 17:49:16

我有一个问题,可能是简单的,但我找不到任何关于它。

我在遗留数据库上使用EF 4.1 Code First。在我们的开发环境中,所有表的所有者都是dbo,但是在生产环境中,有些表的所有者是另一个用户,比如myuser。

我用方法"ToTable"映射我的对象,只指定表名而不指定所有者。这样,EF会自动尝试执行[dbo]。[TableName]在生产环境中抛出无效的对象名错误,因为表是[myuser].[TableName]

是否有一种方法告诉EF在映射表时忽略db所有者?我不能在生产环境中更改所有者,并且由于其他原因,我不能在开发数据库中复制生产配置。

谢谢。

EF代码优先,Db所有者

可以在运行时设置模式。

public class YourDbContext : DbContext
{
    public IDbSet<SomeObject> SomeObjects { get; set; }
    public IDbSet<SomeOtherObject> SomeOtherObjects { get; set; }
    public IDbSet<YetAnotherObject> YetMoreObjects { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Configurations.Add(new RuntimeSchemaConfiguration<SomeObject>());
        modelBuilder.Configurations.Add(new RuntimeSchemaConfiguration<SomeOtherObject>());
        modelBuilder.Configurations.Add(new RuntimeSchemaConfiguration<YetAnotherObject>());
    }
    private class RuntimeSchemaConfiguration<T> : EntityTypeConfiguration<T>
        where T : class
    {
        public RuntimeSchemaConfiguration()
        {
            // Rename the schema based on a string
            // from a config file or other source
            var schemaName = GetSchemaNameFromConfigFile();
            ToTable(typeof(T).Name, schemaName);
        }
    }
}