Entity Framework с существующей базой данных и классами с несколькими источниками по сравнению с ручными хранимыми процедурами

Новичок в Entity Framework и ORM, однако, возможно, есть уникальное обстоятельство, когда мы думаем о некотором рефакторинге того, как работает наше приложение.

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

Мысль состоит в том, чтобы несколько вернуться к ядру и либо интегрировать какую-либо форму ORM, например Entity Framework, либо вручную создать хранимые процедуры в SQL, чтобы ввести данные, необходимые для создания сложного класса.

В качестве примера предположим, что у нас есть класс SomeDashboard, который будет иметь множество свойств, установленных на основе запрошенного Dashboard (хранящегося в SQL), но затем множество списков объектов, связанных с Dashboard, таких как Products или Reviews, и т. д. Можно написать хранимую процедуру, которая будет использовать один запрос к БД, который будет извлекать несколько наборов результатов для создания всех этих списков и значений объектов.

Было бы лучше создать хранимую процедуру для этого или создать несколько хранимых процедур для получения данных по частям (что означает большее количество вызовов SQL) или использовать Entity Framework для поштучной обработки всех объектов вместе?

Что-то, что будет изменчивым, из-за чего это нужно будет перестраивать довольно часто; беспокоит масштабирование базы данных с таким количеством подключений и таким количеством запросов каждый раз, когда мы создаем объект.

Возможно, в этом достаточно смысла, чтобы дать какое-то направление; Я знаю, что это расплывчато, в лучшем случае.

Другая часть вопроса, связанного с Entity Framework, будет заключаться в следующем: насколько сложно сопоставить все с существующими базами данных и классами?

На высоком уровне ... ощущение, что интеграция распределенного кэширования в памяти была не очень хорошо продумана и выполнена таким образом, чтобы «упреждающе оптимизировать», что вызывает больше проблем, чем решает; поэтому возвращение к истокам и интенсивное использование SQL, а затем выборочная интеграция кэширования там, где оно может понадобиться, и когда производительность с SQL становится проблемой, кажется лучшей идеей.


person Sivart    schedule 20.03.2016    source источник


Ответы (1)


Что касается первой части вашего вопроса, вы должны использовать нетерпеливую загрузку в Entity Framework и позволить ему запрашивать данные для вас. Это цель использования OR/M: вы фокусируетесь на коде приложения, в то время как OR/M выполняет необработанную часть чтения и записи данных в источник данных SQL.

Прочтите эту статью MSDN: Загрузка связанных объектов.

О...

Другая часть вопроса, связанного с Entity Framework, будет заключаться в том, насколько сложно сопоставить все с существующими базами данных и классами.

Это не имеет окончательного ответа. Это может зависеть от дизайна вашей базы данных. Если ваша база данных была построена с использованием хороших методов реляционного проектирования, обычно OR/M будет проще настроить для этой базы данных.

person Matías Fidemraizer    schedule 20.03.2016
comment
Спасибо. В этой статье EF выглядит еще круче, чем я думал. Таким образом, после настройки он прозрачен для взаимодействия; просто взаимодействуйте с классом и объектами List‹T›, и он будет соответствующим образом отображаться на устройстве хранения данных? Существует ли инструмент сопоставления, который можно использовать для простого сопоставления базы данных с классами или наоборот без использования одного из шаблонных методов, создающих для вас базу данных или классы? - person Sivart; 20.03.2016
comment
@Sivart OR/M были разработаны для сопоставления графов объектов (иерархических) с реляционными данными (неиерархическими). Поскольку работа с реляционной базой данных при сохранении хорошего объектно-ориентированного программирования является болезненной, OR/Ms пришли к автоматизации тонн кода, который до них был кодом приложения. Теперь это просто слой в черном ящике, на который вы полагаетесь так же, как и на любой другой уровень абстракции. - person Matías Fidemraizer; 21.03.2016