【发布时间】:2019-11-20 15:10:17
【问题描述】:
我有一个使用 C# 在 ASP.NET Core 2.2 Framework 之上编写的应用程序。该应用程序使用 Entity Framework Core 作为 ORM 与数据库交互。
Entity Framework 在很多情况下都对我有好处。它在简单的 CRUD 中非常有用,甚至在添加/更新/删除少量数据时也非常有用。
但是,当我需要读取较大的数据集或由复杂查询生成的数据时,速度太慢了。在许多情况下,我发现实体框架过于复杂的查询会导致我的应用程序变慢。我猜这是使用 ORM 的缺点。但是在我的情况下必须有一个 ORM!
考虑到这一点,我正在寻找一种解决方案,在大多数情况下我可以继续使用 ORM,但要找到一种方法来使用自定义查询提取数据并将相同的查询直接映射到实体模型。我可以直接使用 ADO.NET 来执行我编写的原始查询,从而获得高性能。但是,我需要一种将请求自动映射到实体模型的方法。
为了解释我在寻找什么,假设以下查询 Entity Frameworks over complicates 并且我找到了一个更好的查询来获取相同的数据。这是我更好的原始查询
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 对象?
【问题讨论】:
标签: c# entity-framework orm entity-framework-core asp.net-core-2.2