Как изменить имя / источник таблицы LINQ O / R-M во время выполнения? - PullRequest
6 голосов
/ 24 февраля 2009

У меня есть база данных и набор сущностей, созданный O / R-Mapper, использующий все это с LINQ.

В O / R-Mapper мне нужно ввести имя таблицы (источник) для каждой таблицы, которая используется для SQL, сгенерированного LINQ. В файле .dbml это выглядит так:

<Table Name="dbo.Customers" Member="Customers">

Теперь я хотел бы изменить это имя таблицы во время выполнения, чтобы SQL-код запускался для другой таблицы (например, customer2008 вместо customer).

Есть ли способ изменить имя таблицы (имя источника) во время выполнения?

[Обновить] После некоторого испытания к моему ужасу мне пришлось обнаружить, что XmlMappingSource делает вычисленные свойства, которые не сохраняются в базе данных, недоступными (да, даже отображение, созданное SqlMetal, игнорирует все, что не сохраняется).

Ответы [ 2 ]

7 голосов
/ 24 февраля 2009

Вид ... Вы должны сделать что-то вроде этого:

  1. Создание сущностей в конструкторе.
  2. Используйте SqlMetal для создания файла сопоставления xml из файла .dbml, созданного дизайнером.
  3. Обновить имена таблиц в xml-файле.
  4. Затем в своем коде используйте перегрузку конструктора DataContext, которая принимает XmlMappingSource, созданный с помощью файла сопоставления xml.

Вот запись в блоге, которая объясняет этот процесс шаг за шагом: http://weblogs.asp.net/guybarrette/archive/2008/07/23/linq-to-sql-dynamic-mapping.aspx

Я использую аналогичный процесс с базой данных ERP с именами таблиц, такими как ttccom001xxx, где xxx - идентификатор установки (я знаю, что это ужасная схема, но я ничего не могу с этим поделать). У нас есть несколько установок, поэтому я копирую исходное сопоставление xml один раз для каждой установки, а затем заменяю xxx идентификатором установки. Я написал небольшое консольное приложение, которое использует Regex, чтобы позаботиться о заменах, и добавил его как часть моего процесса сборки.

3 голосов
/ 24 февраля 2009

Вот ссылка на справочник по внешним сопоставлениям Microsoft .

Внешнее сопоставление переопределяет сопоставление на основе атрибутов.

Вот самое необходимое.

  1. Создайте xml, который представляет ваши сопоставления.
  2. Создайте XmlMappingSource и дайте ему xml.
  3. Когда вы создаете свой DataContext, используйте конструктор, который принимает XmlMappingSource, такой как this .
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...