using System; using System.Collections.Generic; using System.Linq; namespace COA.EnterpriseServices.DataAccess.Helpers { public class BaseHelper where T : class, IRecord { private readonly ICollection> dataAccessInstances; public BaseHelper() { dataAccessInstances = DataAccessManager.GetDataAccess(); } protected TResult Invoke(Func, TResult> func) { var results = new List(); foreach (var dataAccessInstance in dataAccessInstances) { results.Add(func(dataAccessInstance)); } // if the "EF" version invokes first, return that value return results.FirstOrDefault(r => r != null && !r.Equals(default(TResult))); } public virtual T Get(int id) { return Invoke(d => d.Get(id)); } public virtual bool Add(T item) { return Invoke(d => d.Add(item)); } } }