EF Code First和Db Owner

时间:2011-04-05 10:25:47

标签: c# .net ef-code-first

我有一个可能很简单但我找不到任何问题的问题。

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

我使用方法“ToTable”映射我的对象,只指定没有所有者的表名。这样,EF会自动尝试继续[dbo]。[TableName]并在生产中抛出无效的对象名称错误,因为该表是[myuser]。[TableName]

有没有办法告诉EF在映射表时忽略db所有者?我无法在生产环境中更改所有者,并且由于其他原因我无法在我们的开发数据库中复制生产配置。

感谢。

1 个答案:

答案 0 :(得分:1)

您可以在运行时设置架构。

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);
        }
    }
}