【问题标题】:Entity Framework and Stored Procedures Mismatched Entities/Models实体框架和存储过程不匹配的实体/模型
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      相关资源
      最近更新 更多