Как мне сопоставить модель Entity Framework Code-First с одной схемой SQL Server? - PullRequest
3 голосов
/ 10 июня 2011

Я создаю модель Entity Framework Code-First для выполнения специальных запросов к базе данных SQL Server. Я не включаю никаких таблиц / представлений из схемы "dbo" в мою модель EF; вместо этого я включаю только таблицы / представления из схемы "модель" в моей базе данных. У меня есть дубликаты имен объектов в моей базе данных, которые разделены только схемой (например, "dbo.Child" и "model.Child").

Есть ли одна строка, которую я могу указать в DbContext, которая в сущности скажет "сопоставить все сущности в этом контексте со схемой" модель "? Я знаю, что могу сопоставить каждую сущность с правильной схемой (см. Ниже), но я бы хотел избежать повторного перечисления каждой сущности в моей базе данных.

Это то, что я знаю, я могу сделать:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{       
    modelBuilder.Entity<Child>().ToTable("Child", "model");
    modelBuilder.Entity<Referral>().ToTable("Referral", "model");
    // 100 lines later...
    modelBuilder.Entity<Exit>().ToTable("Exit", "model");
}

Вот что я хотел бы сделать:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{       
    modelBuilder.Conventions.Add(new MapAllEntitiesToSchemaConvention("model"));
}

1 Ответ

2 голосов
/ 22 декабря 2011

В EF 4.2 я не смог найти этого, чтобы сделать это «из коробки», но мне нужно было, чтобы все мои сущности были в другой схеме, поэтому я взломал это, пытаясь сохранить СУШКУ.Он использует тот же базовый механизм множественного числа, что и EF, и переопределения существуют, если сущности должны указывать имя таблицы.

Требуется ссылка на System.Data.Entity.Design.

public class BaseConfiguration<TEntityType> : EntityTypeConfiguration<TEntityType> where TEntityType : class
{
    private readonly static PluralizationService ps = PluralizationService.CreateService(new CultureInfo("en-US"));

    public BaseConfiguration() : this(ps.Pluralize(typeof(TEntityType).Name)) { }
    public BaseConfiguration(string tableName) : this(tableName, MyContext.Schema) { }
    public BaseConfiguration(string tableName, string schemaName)
    {
        ToTable(tableName, schemaName);
    }
}

Я определяюимя схемы через постоянную строку в MyContext, то есть:

public class MyContext : DbContext
{
    public const string Schema = "my";

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new SnapshotConfiguration());
    }
}

И конфигурации моих сущностей выглядят так:

public class SnapshotConfiguration : BaseConfiguration<Snapshot>
{
    ...
}

Предупреждение: мне все еще нужны конфигурации для каждой сущности, которую я хочув правильной схеме - но ее суть может быть принята в другом месте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...