使用静态方法的静态类使实体框架不会打开太多连接

时间:2013-07-05 21:57:23

标签: c# asp.net linq entity-framework static-methods

我开始了一个新项目,其中使用了带有EF 4.1的mvc 3。服务层作为WCF托管,然后它有一个Entity Framework项目。提出的Service层使用静态类和静态方法与Entity Framework进行通信。

现在我认为静态不是一个“好主意”是更难以进行单元测试而不允许多态等...我的团队负责人说“静态的原因是这样它不会打开一堆连接到实体框架“对我来说似乎不正确......

这是一个从Linq

获取EF数据的示例类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

using PM.DAL;
using PM.DomainModel;
using PM.DomainModel.Staffing;
using PM.Service.DataMapper;
using PM.DomainModel.Enums;

namespace PM.Service
{
public static class Staffing
{

    public static List<HabMatrixSchedule> GetDefaultHabMatrixSchedule()
    {
        var query = new List<HabMatrixSchedule>();
        using (var ctx = new DDDPROGRAM_MONITORING_DBEntities())
        {
                query = (from ad in ctx.lkptblDEFAULT_RESOURCE_ALLOCATION_DETAIL
                         join hl in ctx.lkptblHOUR_LOOKUP on ad.HOUR_LOOKUP_ID
                         equals hl.HOUR_LOOKUP_ID
                         select new HabMatrixSchedule()
                         {
                             DEFAULT_RESOURCE_ALLOCATION_DETAIL_ID = ad.DEFAULT_RESOURCE_ALLOCATION_DETAIL_ID,
                             HOUR_LOOKUP_ID = hl.HOUR_LOOKUP_ID,
                             WEEKDAY_CATEGORY_VALUE_ID = ad.WEEKDAY_CATEGORY_VALUE_ID,
                             HOUR_START = hl.HOUR_START,
                             HOUR_END = hl.HOUR_END,
                             Resource_Count = ad.RESOURCE_COUNT,
                             CurrentWeekDayTime = new WeekDayTime(ad.WEEKDAY_CATEGORY_VALUE_ID, hl.HOUR_LOOKUP_ID)                                 
                         }).ToList();

            return query;
        }


    }


}

}

3 个答案:

答案 0 :(得分:0)

代码肯定是可以并行调用,除此之外,我认为没有理由限制加载(以非静态函数不会的方式)。 (它是否会在没有错误的情况下并行执行取决于共享数据。也许甚至存在具有互斥锁的东西,但我仍然没有看到静态变化情况有多远。)

答案 1 :(得分:0)

这是一篇关于工作单元模式的好文章,http://msdn.microsoft.com/en-us/magazine/dd882510.aspx。这是我在并行执行代码时构建应用程序的方法。

答案 2 :(得分:0)

您展示的这个静态方法每次调用时都会创建新的上下文。因此,如果从方法定义中删除静态,它不会改变任何内容。

除非您创建一个用户桌面应用程序,否则不应创建静态上下文。对于Web应用程序,您应该为每个Web请求创建一个上下文。