У меня есть приложение, написанное с использованием C#
поверх ASP.NET Core 2.2 Framework.Приложение использует Entity Framework Core в качестве ORM для взаимодействия с базой данных.
Entity Framework был полезен для меня во многих случаях.Это очень полезно при простом CRUD или даже при добавлении / обновлении / удалении небольшого объема данных.
Однако, когда мне нужно прочитать несколько больших наборов данных или данных, сгенерированных сложным запросом, это слишком медленно.Во многих случаях я нахожу Entity Framework более сложными запросами, которые приводят к замедлению работы моего приложения.Я предполагаю, что это недостаток использования ORM.Но ORM это должно быть в моем случае!
Имея это в виду, я ищу решение, в котором я могу продолжать использовать ORM в большинстве случаев, но найти способ извлечения данных с помощью пользовательского запроса и непосредственного сопоставления того же запроса с моделями сущностей.Я могу напрямую использовать ADO.NET для выполнения необработанных запросов, которые я пишу, что дает мне высокую производительность.Но мне нужен способ автоматического сопоставления запросов с моделями сущностей.
Для объяснения того, что я ищу, предположим, что следующий запрос Entity Frameworks усложняет, и я нашел лучший запрос для получения того жеданные.Вот мой лучший необработанный запрос
SELECT u.username, u.firstname, u.lastname, p.*
FROM users AS u
INNER JOIN (
SELECT id, title, description, userid
FROM posts
WHERE deletedon IS NULL AND publishedon BETWEEN '2019-07-01' AND '2019-07-10'
) AS p
WHERE u.deletedon IS NULL
У меня есть следующая модель сущности
public class User
{
public int id { get ; set; }
public string username { get ; set; }
public string firstname { get ; set; }
public string lastname { get ; set; }
public DateTime deletedon { get ; set; }
public virtual ICollection<Post> posts { get ; set; }
}
public class Post
{
public int id { get ; set; }
public string title{ get ; set; }
public string description { get ; set; }
public int userId { get ; set; }
public DateTime deletedon { get ; set; }
public DateTime publishedon { get ; set; }
public virtual User user { get ; set; }
}
Существует ли инструмент, который может принять запрос или объект таблицы данных и отобразить его намой User
объект?