Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 29.10.2016
Сообщений: 7

Можно ли вынести классы сгенерированные Entity Framework в отдельную dll?

07.08.2018, 21:44. Показов 1756. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дорогие форумчане, прошу у вас помощи
Пишу сейчас небольшое клиент-серверное приложение на C#
На сервере установлен MS SQL Server и для доступа к данным использую Entity Framework.
Собственно я столкнулась с одной проблемой и надеюсь на помощь)
Я использую метод DataBase first и Entity Framework создает мне классы на основе моей БД.
Можно ли вынести все эти классы в отдельную dll, чтобы можно было использовать их одновременно на сервере и клиенте?
Эту же базу данных я планирую использовать еще и в ASP.NET приложении. Поэтому не хотелось бы создавать 3 одинаковые версии одних и тех же сущностей.
Будет ли это хорошей идеей и есть ли вообще другие варианты?
Спасибо за помощь
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.08.2018, 21:44
Ответы с готовыми решениями:

Entity Framework: Можно ли как то догенерировать классы?
На основе существующей базы сгенерировал code first, но база изменилась в нее добавилось таблиц 20. Можно ли как то догенерировать классы?

Как вынести SQL-запрос в отдельную DLL?
добрый день, помогите пожалуйста. Хочу вынести в dll процедуры но не могу понять как заставить ее работать с sql запросами ...

Как можно вынести код отображения матрицы их процедуры main в отдельную процедуру
Программа готовая. Из этого код программы: Option Base 1 DefInt I-J Sub Main() Const n = 2 Dim M(2 * n, 2 * n) As...

4
Эксперт .NET
 Аватар для Usaga
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,398
08.08.2018, 07:29
Цитата Сообщение от AnyaZaychnko Посмотреть сообщение
Можно ли вынести все эти классы в отдельную dll, чтобы можно было использовать их одновременно на сервере и клиенте?
Не просто можно, а нужно так делать. Причём очень желательно сами классы сущностей держать в одной сборке, а класс контекста и мапинга в другой. Так можно будет весь уровень работы с данными переиспользовать (если надо).

Просто создайте в солюшене ещё проекты (один под классы сущностей, другой под контекст) и перетащите классы по проектам. Простанства имён подправьте ещё, что бы отражали расположение классов.

Цитата Сообщение от AnyaZaychnko Посмотреть сообщение
чтобы можно было использовать их одновременно на сервере и клиенте?
Учтите, что клиенту данные могут понадобиться не в том виде, в каком они храняться в базе и представлены в модели данных Entity Framework. Разница может быть как в типе полей, их количестве и содержимом. К примеру, у вас может быть таблица пользователей, где хранятся отдельно поля под ФИО и поле даты рождения, но клиенту, в каком-то сценарии, может понадобиться ФИО слитое в одну строку через пробелы и возраст числом (не дата рождения). Оригинальный класс таблицы пользователей уже не подойдёт.

Поэтому настоятельно рекомендуется завести ещё один проект, чисто под классы, для обмена данными между клиентом и сервером.
1
0 / 0 / 0
Регистрация: 29.10.2016
Сообщений: 7
08.08.2018, 10:02  [ТС]
Спасибо за ответ.
Но у меня теперь появились немного другие вопросы.
Если я создам отдельную dll с сущностями, которые точно будут и на стороне сервера и на стороне клиента( будут иметь одинаковый вид, набор полей и методов). А уже потом наследоваться от этих классов и расширять их функционал отдельно для сервера и отдельно для клиента? Я мыслю в правильном направлении или сильно заблуждаюсь?
Если я так сделаю, то как мне это объединить с Entity Framework и не будет ли потерян смысл использования этого фреймворка?
Спасибо)
0
Эксперт .NET
 Аватар для Usaga
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,398
08.08.2018, 10:10
Лучший ответ Сообщение было отмечено AnyaZaychnko как решение

Решение

Цитата Сообщение от AnyaZaychnko Посмотреть сообщение
А уже потом наследоваться от этих классов и расширять их функционал отдельно для сервера и отдельно для клиента? Я мыслю в правильном направлении или сильно заблуждаюсь?
Не надо так делать. У класса всегда должно быть одно назначение, один сценарий использования. Я же в посте выше чётко описал, что делать в такой ситуации: заводить отдельный класс, который данные будет хранить в более подходящем для сценария использования формате. Не надо городить иерархии наследования, это всё захламит.

Если класс из модели EF не будет подходить для каких-то сценариев, то смело заводите более удобный класс. Данные между такими классами можно смело переносить (или руками или через Automapper). И сам EF умеет считывать данные в классы не входящие в его модель. Т.е. если в каком-то сценарии вам понадобится только пара полей из таблицы, то не обязательно считывать вообще всё, чтобы взять подмножество, можно считать только нужное в более подходящий меньший класс через Select().

И копипасты не бойтесь. Не будет ничего страшного, если у вас будут классы с похожими наборами полей. Не надо маниакально стремиться переиспользовать классы в ситуациях, когда они неудобны. И не надо раздувать содержимое класса ради разных сценариев использования. Это и наследования касается.
1
0 / 0 / 0
Регистрация: 29.10.2016
Сообщений: 7
08.08.2018, 10:19  [ТС]
Спасибо большое за ответ)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.08.2018, 10:19
Помогаю со студенческими работами здесь

В чем разница между Entity Framework и Entity Framework Core?
В чем разница (если она есть) между entity framework и entity framework core?

Можно ли количественно отобразить процесс загрузки таблицы БД в DbSet (Entity Framework) ?
Есть БД. При загрузке таблицы программа зависает. Чтобы отобразить прогресс загрузки в программе, мне необходимо знать процент(степень)...

Можно ли как-то динамически сгенерировать функцию для поиска записей в Entity Framework?
Привет! Есть сущность (таблица) User, у которой есть свойства SkypeId и TelegramId. На самом деле подобных свойств больше, но для...

Entity Framework. Удаление entity без удаления связей
Вечер добрый. Есть модель Coder First. Каскадное удаление запрещено. Удаление произвожу так: try { ...

Вынести суммирование в отдельную функцию
Ребят, подскажите как сделать тут функцию и от минуса уйти, никак не могу понять: #include "stdafx.h" #include...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
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