Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
 Аватар для G@leON
6 / 6 / 2
Регистрация: 02.06.2009
Сообщений: 99

Организация импортирующего функционала при работе с EntityFramework

28.03.2017, 16:50. Показов 680. Ответов 3

Студворк — интернет-сервис помощи студентам
Доброго времени суток, дорогие гуру. Есть у меня разработанная под приложение БД, есть уже все сущности, описан Context со всякими FluentAPI... НО, еще у меня есть несколько разнородных источников данных (имею ввиду различные xls-файлики и прочее мракобесие); так вот - данные с этих источников нужно будет переодически в БД импортировать (конечно, если бы с приложением работал специалист, умеющий в написание SQL-скриптов, парится бы не пришлось, но ввиду отсутствия онного).
В целом, с какой стороны укусить я знаю, но в виду недостатка опыта разработки хочу спросить, как организовать код будет лучше. Помогите Даше решить загадку: "Есть 2 стула 3 варианта"
1. Создать static class Importer (аля фабрика статик методов);
2. В контекстном классе импортирующие методы для экземпляра соответствующего контекста;
3. Через класс манагер, который в себе имеет экземпляр контекста, управляет операциями чтения записи; нууууу и там же сделать импорт (очевидно этот вариант звучит приятней, НО, я пока класс манагер не писал, и особо не планирую, ибо думаю что после меня никто дописывать это приложение не будет, а даже если и будет, то код открытый, а на сам EF документации хоть закопайся, зачем усложнять/упрощать людям жизнь???).

Что бы понятней было, скажем есть сущность:
C#
1
2
3
4
5
6
7
8
9
10
11
public partial class Vendor
{
  public int VendorID { get; set; }
  public string VendorName { get; set; }
  
  public DbSet<DeviceAccount> Devices { get; set; }
  
  public Vendor() {
    Devices = new DbSet<DeviceAccount>();
  }
}
Есть некоторый контекс... А еще есть сторонний источник данных с перечислением всех вендоров аппаратного обеспечения в виде пар VEN;VendorName... Алгоритм импорта примерно следующий:
1. Берем очередную строку файла.
2. Делаем: ven = new Vendor("очередная строка").
3. dbContext.Vendors.Add(ven)
4. Повторяем 1-3, пока не конец файла.
5. Если все ОКЕЙ, коммит, ну а если не окей, то роллБэк и вывалиться исключение.

Сам я пока спрогнозировать всех плюсов/минусов определенной "архитектуры" не могу, а посему от направляющих бы не отказался.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.03.2017, 16:50
Ответы с готовыми решениями:

Анкетирование: организация интерфейса и функционала в целом
помогите пожалуйста))) с фантазией никак....какие менюшки можно добавить к программе анкетирования, кроме сохранения,открытия файла и...

Исключение при работе с pictureBox (задание картинки при работе с формой)
Хочу задать изображение в компоненте pictureBox во время разработки формы, чтоб при запуске проги сразу отображалась картинка. Задаю...

EntityFramework сортировка при получении данных из БД
Проблема следующая: есть класс, содержащий список: public class Container { public List&lt;Parameter&gt; Parameters {get;...

3
Эксперт .NET
 Аватар для Usaga
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,398
29.03.2017, 07:38
G@leON, что-то сложно всё вышеописанное переварить. Я выделил следующую проблему: есть пучок разных источников данных, из которых нужно импортировать в одну БД.

Если это так, то сложности я не вижу. Каждый источник данных прячете за абстракцией (типа ISomeDataProvider или как боженька надушу положит) с общим интерфейсом (по возможности) и выгребаете из них данные единообразным способом в виде коллекций объектов (включенных в модель данных EF).
1
 Аватар для G@leON
6 / 6 / 2
Регистрация: 02.06.2009
Сообщений: 99
29.03.2017, 10:43  [ТС]
Т.е. создать класс/набор классов от абстракции, которая данные из источника данных превращает в коллекцию типизированную под нужную мне сущность и включить данную абстракцию в контекстный класс? Типо в классе унаследованном от DbContext будут переменные типов ISomeDataProvider, и когда я запускаю импорт, в контексте создается экземпляр такого провайдера, а когда импорт прошел/неПрошел - экземпляр диспозится.
0
Эксперт .NET
 Аватар для Usaga
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,398
29.03.2017, 10:53
G@leON, нет, совсем не так.

Для каждого источника данных (кроме БД), создаёте свой класс-поставщик данных. Очень желательно чтобы эти поставщики имели общий интерфейс (вам же проще и удобнее с этим работать), чтобы можно было единообразно с данными поставщиками работать.

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

Но такой вариант возможен, если все поставщики могут возвращать один тип объекта. Если нет, то всё равно источники данных лучше было бы завернуть в провайдеры...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.03.2017, 10:53
Помогаю со студенческими работами здесь

Грабли при работе STM32f4 при работе с ftp
Столкнулся с такой проблемой. Работаю в связке Stm32f4+cinterion bgs2e8 при сливании файла с ftp, если в файле есть 0x00(NULL), а они...

Ошибка при установке Mysql.Data.EntityFramework core
При установке Mysql.Data.EntityFramework core через nuget выдает ошибку Failed to add reference to &quot;System.Runtime&quot; Please make sure...

Найти экстремум функционала при заданных краевых условиях
Найти экстремум функционала J(u) при заданных краевых условиях на концах отрезка . Cчитается, что u(x)\epsilon{C}^{2}(a,b) ...

EntityFramework, база данных создается, но выдает ошибку при открытии страницы
public class SiteContextModel : DbContext { public DbSet&lt;PostDb&gt; PostDb { get; set; } public DbSet&lt;RegisterModel&gt;...

Аппаратная ошибка видео (Ошибка при работе с видеоустройствами привела к некорректной работе Windows).
Аппаратная ошибка видео. Последнее время во время игры Call of Duty: Modern Warfare 2 в мультиплеер, (между сменами карт, как только...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru