Динамическое изменение сопоставления Fluent API - PullRequest
3 голосов
/ 19 марта 2012

Наш проект использует Entity Framework Code First. Мы хотим иметь экземпляр, где очень простой POCO представляет множество таблиц в базе данных. Это часть стратегии горизонтального разделения в SQL Azure. SQL Azure не поддерживает файловые группы, поэтому он не поддерживает типичное разбиение. Будет очень большое количество таблиц, поэтому использование представления UNION ALL в качестве разделенного представления с помощью CHECK CONSTRAINTs для базовых таблиц будет невозможно.

Таким образом, мы бы предпочли выполнить отображение по мере необходимости во время выполнения. Однако это происходит в событии OnModelCreating класса DbContext с помощью кода, такого как

modelBuilder.Entity<EntityName>().ToTable("foo", "bar");

. Возможно ли нам выполнить это отображение на фабрике? Мы бы предпочли поставлять метаданные на фабрику и использовать их тогда для Fluent API, а не для однозначного отображения между POCO и таблицей через ModelBuilder.

1 Ответ

5 голосов
/ 19 марта 2012

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

DbModel создается, когда это действительно необходимо, поэтому конструктор всегда запускается до события OnModelCreating.(Это не всегда так в производных классах, но это другая тема).

В качестве оптимизации вы можете кэшировать скомпилированные DbModel s и строить DbContext s с помощью конструктора, принимающего DbCompiledModel.

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