2

我开始了一个使用 EF 4.1 的 mvc 3 的新项目。服务层作为 WCF 托管,然后它有一个实体框架项目。建立的服务层使用带有静态方法的静态类与实体框架对话。

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

这是一个使用 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;
        }


    }


}

}
4

3 回答 3

0

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

于 2013-07-05T22:38:26.227 回答
0

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

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

于 2013-07-05T22:50:24.247 回答
0

代码当然可以并行调用,除此之外,我认为没有理由限制负载(以非静态函数不会的方式)。(它是否会在没有错误的情况下并行执行取决于共享数据。也许甚至有一些带有互斥锁的东西,但我仍然看不到静态在多大程度上改变了这种情况。)

于 2013-07-05T22:24:02.287 回答