Я использую EF4 с POCO и пытаюсь сделать его тестируемым.
Поэтому я создаю интерфейс IObjectContext следующим образом:
public interface IObjectContext
{
IObjectSet<Employee> Employees { get; }
IObjectSet<Team> Teams { get; }
void Commit();
}
Затем я изменил тип свойств на IObjectSet в моем реальном классе ObjectContext следующим образом:
public partial class HRManagementEntities : ObjectContext, IUnitOfWork
{
// skip some codes here...........
public IObjectSet<Employee> Employees
{
get { return _employees ?? (_employees = CreateObjectSet<Employee>("Employees"));
}
private IObjectSet<Employee> _employees;
public IObjectSet<Team> Teams
{
get { return _teams ?? (_teams = CreateObjectSet<Team>("Teams")); }
}
private IObjectSet<Team> _teams;
public void Commit()
{
SaveChanges();
}
}
В моем слое обслуживания используйте EF следующим образом:
public class Service
{
private IObjectContext ctx;
public HRService(IObjectContext ctx)
{
this.ctx = ctx;
}
public List<Team> GetAllTeams()
{
return ctx.Teams.ToList();
}
}
Вот моя проблема: как вызывать методы в ObjectContext, например, ApplyCurrentValues (), ExecuteStoreCommand () и т. Д ...?
Нужно ли реализовывать эти методы в IObjectContext для использования?
EDIT
Как совет RPM, я создал следующий метод расширения для метода ApplyCurrentValues (), другие методы могут быть расширены таким же образом.
public static T UpdateModel<T>(this IObjectSet<T> iObjectSet, T currentEntity) where T : class
{
ObjectSet<T> objectSet = iObjectSet as ObjectSet<T>;
if (objectSet == null || currentEntity == null)
throw new ArgumentNullException();
return objectSet.ApplyCurrentValues(currentEntity);
}