避免在wcf和ef中重复代码

时间:2013-12-25 20:42:12

标签: c# wcf entity-framework

我有10个代码块,彼此相似。

其中两个如下:

[OperationContract]
public IEnumerable<HaemogramReport> GetHaemogramReports(int patientId)
{
    using (Lab_Lite_Entities db = new Lab_Lite_Entities())
    {
        var result = db.HaemogramReports.Where(h => h.Patients.Any(p => p.PatientID == patientId)).ToList();
        result.ForEach(h => ((IObjectContextAdapter)db).ObjectContext.Detach(h));
        return result;
    }
}

[OperationContract]
public IEnumerable<UrineAnalysis> GetUrineAnalysises(int patientId)
{
    using (Lab_Lite_Entities db = new Lab_Lite_Entities())
    {
        var result = db.UrineAnalysises.Where(u => u.Patients.Any(p => p.PatientID == patientId)).ToList();
        result.ForEach(u => ((IObjectContextAdapter)db).ObjectContext.Detach(u));
        return result;
    }
}

第一种方法包含db.HaemogramReports,第二种方法包含db.UrineAnalysises。除了每件事情都相似之外。这是所有十种方法的类似行为。那么,我如何重新格式化我的代码以避免重复呢?

1 个答案:

答案 0 :(得分:2)

这不是一个完整的答案。

对于10个案例,这可能不值得。

但是你可以做一些为“有病人名单的事情”定义界面的事情。为具有患者列表的实体创建另一个类部件,以强制他们实现界面。然后你可以编写一个泛型方法,它采用IEnumerable<T>定义T来实现接口。然后,该方法可以在患者列表中执行谓词。