我开始了一个新项目,其中使用了带有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;
}
}
}
}
答案 0 :(得分:0)
代码肯定是可以并行调用,除此之外,我认为没有理由限制加载(以非静态函数不会的方式)。 (它是否会在没有错误的情况下并行执行取决于共享数据。也许甚至存在具有互斥锁的东西,但我仍然没有看到静态变化情况有多远。)
答案 1 :(得分:0)
这是一篇关于工作单元模式的好文章,http://msdn.microsoft.com/en-us/magazine/dd882510.aspx。这是我在并行执行代码时构建应用程序的方法。
答案 2 :(得分:0)
您展示的这个静态方法每次调用时都会创建新的上下文。因此,如果从方法定义中删除静态,它不会改变任何内容。
除非您创建一个用户桌面应用程序,否则不应创建静态上下文。对于Web应用程序,您应该为每个Web请求创建一个上下文。