C#工作单元模式单元

时间:2017-04-07 14:29:44

标签: .net entity-framework web-services repository-pattern unit-of-work

我试图在工作单元中使用存储库模式。我使用C#和Entity Framework,我的目的是使用这个代码将不同的数据源连接到一个控制器,但我无法实现它。

这是我的情景:

我有两种不同的数据源:

  • 带有实体框架的SqlServer读写数据

  • 检索数据的Web服务。

我会使用一个工作单元来互换访问这两个数据源。

这是我的存储库:

class GenericRepository<T> : IRepository<T> where T : class
{
    private DBEntities entities = null;
    IObjectSet<T> _objectSet;

    public GenericRepository(DBEntities _entities)
    {
        entities = _entities;
        _objectSet = entities.CreateObjectSet<T>();
    }

    public IEnumerable<T> GetAll(string uri, string ragneUri)
    {
        IEnumerable<T> t = new List<T>();
        return t.AsEnumerable();
    }

    public IEnumerable<T> GetAll(Func<T, bool> predicate = null)
    {
        if (predicate != null)
  {
      return _objectSet.Where(predicate);
  }

  return _objectSet.AsEnumerable();
    }

    public T Get(Func<T, bool> predicate)
    {
  return _objectSet.First(predicate);
    }

    public void Add(T entity)
    {
  _objectSet.AddObject(entity);
    }

    public void Attach(T entity)
    {
  _objectSet.Attach(entity);
    }

    public void Delete(T entity)
    {
  _objectSet.DeleteObject(entity);
    }
}

它是我的工作单位

public class GenericUnitOfWork : IDisposable
{
    private DBEntities entities = null;
    private DataActions da = null;

    public GenericUnitOfWork(DBEntities PE)
    {
        entities = PE;
    }

    public Dictionary<Type, object> repositories = new Dictionary<Type, object>();

    public IRepositoryIPSE<T> Repository<T>() where T : class
    {
        if (repositories.Keys.Contains(typeof(T)) == true)
        {
            return repositories[typeof(T)] as IRepository<T>;
        }
        IRepository<T> repo = new GenericRepository<T>(entities);
        repositories.Add(typeof(T), repo);
        return repo;
    }

    public void SaveChanges()
    {
        entities.SaveChanges();
    }

    private bool disposed = false;

    protected virtual void Dispose(bool disposing)
    {
        if (!this.disposed)
        {
            if (disposing)
            {
                entities.Dispose();
            }
        }
        this.disposed = true;
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }
}

现在我成功连接数据库,但我没有连接到Web服务。

要访问Web服务,我想用单一方法GetData()创建第二个存储库,但我不知道如何与工作单元集成并交替使用不同的存储库。有一种不同的方法可以解决这个问题吗?

感谢&#39; S

0 个答案:

没有答案