[英]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.