Entity Framework Code First с таблицами Dynamics Navision

У меня есть проект, в котором мне нужно разработать систему сущностей с первым кодом с существующей базой данных. Эти существующие таблицы в базе данных - это не просто таблицы, они были созданы с помощью инструмента Microsoft ERP "Dynamics Navision". Инструмент Navision хранит различную информацию о компании и создает разные таблицы для каждой компании. Предположим, есть 3 типа таблиц;

  • Таблица X
  • ТаблицаY
  • ТаблицаZ

А также есть 3 разные компании;

  • Компания А
  • КомпанияB
  • КомпанияC

Инструмент создал 9 различных таблиц из приведенных выше комбинаций. Он просто дублирует все таблицы и добавляет к именам таблиц префикс с названием компании. В итоге наша база данных выглядит так:

  • КомпанияA $ TableX
  • КомпанияA $ TableY
  • КомпанияA $ TableZ
  • КомпанияB $ TableX
  • КомпанияB $ ТаблицаY
  • КомпанияB $ TableZ
  • КомпанияC $ TableX
  • КомпанияC $ TableY
  • КомпанияC $ TableZ

Чем я занимался до сих пор?

Итак, как видите, есть возможность упростить эту архитектуру на стороне Entity Framework. Для этого я создал 3 класса сущностей для TableA, TableB, TableC и во время выполнения я позволил пользователю выбрать компанию, и в соответствии с выбранной компанией я отразил свой класс сущности с помощью настраиваемого TableAttribute, где имя таблицы было префиксом с названием компании. Я не собираюсь подробно рассказывать, как я этого добился прямо сейчас (но вы можете найти подробности реализации в этой статье: LINK), но пока все хорошо, и я применил все предыдущие шаги успешно, и мне удалось быть динамичным по именам таблиц с выбранной компанией. Однако есть еще одна проблема.

Какой у меня вопрос?

Проблема в том, что даже несмотря на то, что мне удалось создать систему, в которой я могу изменить атрибут имени таблицы класса сущности во время выполнения и получить доступ к таблицам целевых компаний, не было никакой гарантии, что дублированные таблицы с разными префиксами названий компаний разделяют% 100 та же внутренняя архитектура поля. Например, CompanyA$TableX может иметь 5 полей, а CompanyB$TableX - 6 полей, где первые 5 полей совпадают с полями CompanyA $ TableX, но последнее 1 поле является дополнительным. Давайте также визуализируем это;

Поля таблицы CompanyA$TableX;

  1. ID
  2. Имя
  3. Фамилия
  4. Адрес
  5. Телефонный номер

Поля таблицы CompanyB$TableX;

  1. ID
  2. Имя
  3. Фамилия
  4. Адрес
  5. Телефонный номер
  6. Электронная почта

Как видите, поле Email является дополнительным, однако имена таблиц такие же (TableX), отличается только компания, и в моей системе они используют один и тот же класс сущности и название компании, определенное во время выполнения, как я упоминал ранее.

Итак, я хочу знать, как мне добиться в этом динамизма. Как я могу иметь только один класс сущности, но быть динамичным в полях этого класса в соответствии с выбранной компанией. Я хочу знать, возможно ли это технически, и если да, то как это реализовать. Заранее спасибо.


person Ozan Yurtsever    schedule 24.11.2019    source источник
comment
Не забудьте указать, какую версию Nav вы используете.   -  person Mak Sim    schedule 25.11.2019


Ответы (1)


То, что вы говорите о Nav, не соответствует действительности. Невозможно создать одну и ту же таблицу в Nav, которая будет иметь разную структуру для каждой компании. Даже современная архитектура расширений не даст такого результата.

person Mak Sim    schedule 24.11.2019
comment
Это ответ? - person Ozan Yurtsever; 24.11.2019
comment
@озанюртсевер какой то. Вам не нужен ответ, потому что ваше предположение о структуре базы данных Nav неверно. Таким образом, вам не нужно реализовывать то, о чем вы просите. Потому что в Nav такая ситуация просто невозможна. В этом случае он просто перестанет работать. Или вы можете стереть Nav из вопроса, тогда это будет законный вопрос просто из любопытства. - person Mak Sim; 25.11.2019
comment
Nav делает то же самое, о чем я говорю, и мой вопрос вполне обоснован. - person Ozan Yurtsever; 25.11.2019
comment
@OzanYurtsever, так, ты справился? - person Mak Sim; 17.12.2020