繁体   English   中英

使用静态方法的静态类会阻止Entity Framework打开太多连接吗

[英]Do Static classes with static methods keep Entity Framework from opening too many connections

我开始一个新项目,其中使用了带有EF 4.1的mvc 3。 服务层作为WCF托管,然后有一个实体框架项目。 所建立的Service层正在使用带有静态方法的静态类与Entity Framework进行通信。

现在,我对静态进行罚款,使其不是一个“好主意”,很难对其进行单元测试并且不允许多态性等。我的团队负责人说:“静态的原因是这样,因此它不会打开与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;
        }


    }


}

}

当然, 可以并行调用该代码,除此之外,我认为没有理由限制负载(以一种非静态函数不会的方式)。 (它是否可以并行执行而不会出错取决于共享数据。甚至可能有互斥量,但是我仍然看不到静态会改变这种情况。)

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

您显示的此静态方法每次调用都会创建新的上下文。 因此,如果从方法定义中删除静态变量,则不会有任何改变。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM