EF Code First и Db Владелец - PullRequest
       5

EF Code First и Db Владелец

1 голос
/ 05 апреля 2011

У меня есть проблема, которая может быть простой, но я ничего не могу найти об этом.

Я использую код EF 4.1 First на устаревшей базе данных. В нашей среде разработки все таблицы принадлежат владельцу "dbo", но в рабочей среде некоторые находятся под другим пользователем, скажем, "myuser".

Я сопоставляю свой объект методом «ToTable», указывая только имя таблицы без владельца. Таким образом, EF автоматически пытается перейти на [dbo]. [TableName] и в производственной среде выдает ошибку недопустимого имени объекта, так как таблица - [myuser]. [TableName]

Есть ли способ указать EF игнорировать владельца базы данных при отображении таблиц? Я не могу сменить владельцев в производственной среде и не могу по другим причинам копировать производственную конфигурацию в нашей базе данных разработки.

Спасибо.

1 Ответ

1 голос
/ 05 апреля 2011

Вы можете установить схему во время выполнения.

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);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...