【发布时间】:2012-07-27 19:25:56
【问题描述】:
我真的在这里寻求有关最佳做法的建议,因此我将解释这种情况。我们有一个相当大的应用程序,它建立在 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 类。这感觉不对,当您想要一个具有从多个表构建的数据的单个对象时,我希望从其他人的经验中获得任何建议或见解,这将比实体框架快得多在启用延迟加载的情况下调用。
非常感谢您的帮助
【问题讨论】:
标签: c# sql-server stored-procedures entity-framework-4