0

我真的在这里寻找关于最佳实践的建议,所以我会解释这种情况。我们有一个相当大的应用程序,它建立在 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 类。这感觉不对,当您想要一个具有从多个表构建的数据的单个对象时,我希望从其他人的经验中获得任何建议或见解,这将比实体框架快得多在启用延迟加载的情况下调用。

非常感谢您的帮助

4

1 回答 1

0

您的存储库返回实例的新方法没有任何问题NewsDataModel- 它仍然在您的范围内,INewsRepository因为它是从新闻信息构造的数据类。否则,您将拥有您定义的每个数据模型的存储库。

于 2012-07-29T16:44:42.467 回答