1

对于如何在使用实体框架的应用程序中组织与数据层的连接(存储库类),我感到两难。

你会怎么写?为什么?

public class ResearchRepository
{
    public Research GetResearch (int id)
    {
        using (MnijenjeEntities mnijenjeContext = new MnijenjeEntities())
        {
            ObjectQuery<Research> researchs = mnijenjeContext.Research;

            var research = (from r in researchs.Include("SurveyPaper")
                            where r.ResearchID == id
                            select r).First();
            return research;
        }
    } //....

或者

public class ResearchRepository
{
    private MnijenjeEntities mnijenjeContext;

    public Research GetResearch(int id)
    {
         mnijenjeContext = new MnijenjeEntities();

         ObjectQuery<Research> researchs = mnijenjeContext.Research;

         var research = (from r in researchs.Include("SurveyPaper")
                         where r.ResearchID == id
                         select r).First();
         return research;
    } //....

区别在于dataContext对象的使用。

4

1 回答 1

1

我或多或少地使用后一种技术,但我不确定您是否准确地提出了正确的问题。我认为真正的问题是“工作的单位是什么?” 我们需要考虑一些基本事实:

  • 对同一操作使用多个 ObjectContext 比在一个操作中使用单个 ObjectContext 困难得多。
  • 长时间保留 ObjectContext 可能会消耗大量内存,并可能产生其他不良副作用。
  • ObjectContext 本身具有一些“轻量级事务”功能,即它可以累积更改并可以一次应用所有更改,并且在某种程度上,您与其他上下文中的更改隔离。

因此,我倾向于尝试每个工作单元使用一个 ObjectContext,并在工作单元完成时处置上下文。由于一个工作单元可能涉及多个存储库,因此我实例化了一个创建 ObjectContext 的服务类也可以返回存储库。当我向服务请求存储库时,它会在返回新实例之前注入 ObjectContext。处置服务会立即处置上下文和所有存储库。

我每个工作单元使用一个服务实例。就我而言,我正在做 ASP.NET MVC,所以一个工作单元是对单个请求的响应。

于 2009-09-11T13:18:50.690 回答