0 / 0 / 0
Регистрация: 29.10.2016
Сообщений: 7

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

07.08.2018, 21:44. Показов 1762. Ответов 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
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,474
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
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,474
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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru