Правильный способ использования ORM в ASP.NET Core MVC?

2

Неопытный веб-разработчик кричит о помощи!

Вступление

Я разрабатываю веб-приложение MVC (используя ASP.NET Core из-за моего интереса к нему). На внутреннем сервере имеется MSSQL-сервер с довольно сложными базами данных (тысячи таблиц). В моем проекте я хотел бы представить часть общедоступных данных в представлении (в таблицах) на основе пользовательских запросов (отправка запросов формы), а затем позволяет пользователю загружать данные (CSV, XML).

Проблемы архитектуры

  • Уровень доступа к данным

Сначала я начал с использования Entity Framework, но позже понял, что просто не могу перевести все мои операторы SQL в LINQ. Причина в том, что самый простой запрос содержит несколько инструкций INNER JOINS и LEFT JOINS и SELECT и бесконечное количество таблиц.

  • Уровень бизнес-логики

Я планирую создать REST API, посылая данные в формате JSON. Насколько я заинтересован в.NET Core MVC, я могу иметь свой контроллер API в том же проекте, что и мой уровень представления.

  • Уровень презентации

Это единственная часть, с которой я сталкиваюсь, создание веб-приложений с использованием MVC 5.

Большая борьба

В этом проекте я не буду манипулировать данными, только ПРОЧИТАЙТЕ его и представить их пользователю. Я знаю принципы использования разных классов модели (Domain, Entity, ViewModel)

Что я делаю сейчас, и я полагаю, что это неправильно:

  • Контроллер MVC API возвращает результаты запроса SQL как объект типа DataTable (имеет класс SQL Helper для выполнения задания), пока мой контроллер позаботится о сериализации объектов как JSON.

  • Другой контроллер (с привязкой модели к представлению) получает критерии поиска пользователя через HTML-формы и вызывает контроллер API с привязкой соответствующих свойств.

Наконец, вопросы

  • Должен ли я придерживаться необработанных SQL-запросов вместо Entity Framework, и если да, то следует ли использовать просто разделенные библиотеки классов (как уровень доступа к данным) и ссылаться на него в API? Или оставить DAL и поместить всю логику SQL-запросов в API?
  • Нужно ли использовать Entity Framework в случае чтения данных без их манипулирования? Единственная манипуляция, которую я намереваюсь сделать, - форматировать внешний вид в логическом слое.

ОБНОВЛЕНИЕ РЕДАКТИРОВАНИЯ:

В моих SQL-запросах я должен создавать временные таблицы, которые не поддерживаются в LINQ. Какие-либо предложения?

В случае, если этот вопрос будет отмечен как архитектурный, а не программный, примите мои извинения и любезно отсылайте меня на правильный форум, где я могу получить помощь.

Спасибо заранее!

  • 0
    «это самый простой запрос, содержащий несколько операторов INNER JOINS и LEFT JOINS и SELECT, а также бесконечное число таблиц»: очевидно, что «endless» - это гипербола, без этого LINQ to Entities будет вполне успешно обрабатывать многофакторные соединения. Но приходит время, когда вам нужно написать SQL, вызвать UDF или SProc: все в EF без потери отслеживания изменений, что делает ORM, подобный EF, выигрышем в производительности.
  • 0
    Спасибо, @Richard Тогда я определенно пойду вокруг LINQ to Entities.
Показать ещё 3 комментария
Теги:
sql-server
asp.net-core
entity-framework
multi-tier

1 ответ

1
Лучший ответ

Вы найдете запросы LINQ намного легче понять и отладить, чем SQL. Сохраняйте уровень доступа к данным как отдельный проект и имеете модульные тесты для запросов. Чтобы сохранить принцип SOLID, не смешивайте слой данных с api. Если вы только начинаете, EF Core может быть лучше EF6 в основном из-за скорости и мобильности.

  • 0
    понимание и отладка больше связаны с языковыми предпочтениями разработчиков. Я, конечно, нахожу, что LINQ гораздо сложнее использовать, чем SQL, но я программист баз данных.
  • 0
    @hlo ваш вклад - большая помощь для моей архитектурной борьбы! Я пометил в качестве ответа, так как я получил достаточно вдохновения от вашего ответа и комментариев других, чтобы продолжить (я признаю, что мой пост был немного широким и затрагивал несколько вопросов, я лучше закрою его и открою новый вопрос, если я застрял с моим Проект) Большое спасибо всем! Поддерживайте хороший дух сообщества StackOverflow!
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню