我真的在这里寻找关于最佳实践的建议,所以我会解释这种情况。我们有一个相当大的应用程序,它建立在 POCO 和 EF 4 之上,并带有一个复杂的数据库。虽然我们对 Entity Framework 很满意,但在以下场景(相当简化)中,我们还需要做出明确的性能改进。
我们有一个名为 News 的表,其中包含已将其添加到收藏夹的用户集合和用户评分 (1 - 5) 的集合,例如:
public class News
{
public virtual int NewsId;
public virtual string Title;
.......etc....
public virtual ICollection<User> UserFavourites { get; set; }
public virtual ICollection<Rating> Ratings { get; set; }
}
我们编写了一个存储过程,它为用户返回新闻,并允许我们返回它是否是最喜欢的,以及它是否已经被我们请求数据的用户评级和新闻的当前评级,而不是使用 EF 构建这些来自 ICollections 的数据,我们最终得到一个如下所示的对象。
public class NewsDataModel
{
public int NewsId;
public string Title;
.......etc....
public bool IsFavourite { get; set; }
public bool IsRated { get; set; }
public double Rating { get; set; }
}
存储过程要快得多,并且单个数据库命中而不是带有延迟加载的 EF,后者可能是多个调用,但存储过程返回的数据与上面的新闻的 POCO 类不匹配。
我们一直在尝试以最好的方式来推进这一点,因为我们有一个 INewsRepository,它可以返回与实体框架相关的类或我们正在使用存储过程和 ADO.NET 填充的自定义 DataModel 类。这感觉不对,当您想要一个具有从多个表构建的数据的单个对象时,我希望从其他人的经验中获得任何建议或见解,这将比实体框架快得多在启用延迟加载的情况下调用。
非常感谢您的帮助