Модель сущностей генерирует частичные классы. В моем проекте я использую модель сущностей внутри библиотеки классов и добавил в нее несколько файлов .cs, которые добавляют функциональность классам сущностей по умолчанию. (В основном функции, связанные с регистрацией ошибок и сообщений в таблице базы данных, а также метод импорта / экспорта всех данных в XML.)
Но настоящая бизнес-логика находится во второй библиотеке классов, которая ссылается на эту библиотеку классов сущностей.
Давай объясним Сначала я создал модель сущности из базы данных. Он содержит список названий компаний и адресов. Я делаю это, выбирая «Новый проект | Библиотека классов», а затем добавляю модель данных сущности ADO.NET в эту библиотеку. Модель Entity будет связана с моей базой данных SQL Server, импортируя нужные мне таблицы и автоматически создавая классы для таблиц, к которым я хочу получить доступ.
Затем я добавляю второй файл .cs для каждой таблицы, которую я хочу расширить. Это было бы несколько необработанных методов, которые тесно связаны с базой данных. (В основном методы импорта / экспорта и регистрации ошибок.) Это я буду называть Entity.Model, который будет компилироваться в Entity.Model.dll.
Затем я добавляю второй проект, который будет содержать бизнес-логику. Я снова использую «Новый проект | Библиотека классов» для его создания и добавляю Entity.Model.dll к его ссылкам. Затем я начинаю писать классы, которые переведут специфичные для базы данных классы в более логичные классы. В общем случае мне не нужно было бы вносить много изменений, за исключением того, что я буду защищать или скрывать определенные поля и добавлять несколько вычисляемых полей. Бизнес-логика будет раскрывать только те функции, к которым я хочу получить доступ из моего клиентского приложения, а не единственный метод. Таким образом, если я не позволю клиенту удалять компании, тогда функция «Удалить» в модели сущностей будет , а не на бизнес-уровне. И, возможно, я хочу отправить уведомление, когда компания меняет свой адрес, поэтому я добавлю событие, которое срабатывает при изменении поля адреса компании. (Который напишет журнал сообщений или что-то в этом роде.) Я назову это business.logic, и оно скомпилируется в Business.Logic.dll.
Наконец, я создам клиентское приложение и добавлю ссылку на Business.Logic.dll. (Но НЕ для сущностной модели.) Теперь я могу начать писать свое приложение и обращаться к базе данных через бизнес-уровень. Бизнес-уровень будет выполнять валидацию, запускать несколько событий и делать что-либо еще в дополнение к модификации базы данных посредством модели сущностей. А сущностная модель служит просто для того, чтобы поддерживать отношения с базой данных простыми, что позволяет мне «проходить» данные по всем внешним ссылкам в базе данных.