从另一个存储库C#调用存储库方法

时间:2015-07-10 19:07:47

标签: c# entity-framework repository-pattern

我有一个“DatabaseController”类,它包含几个存储库类,每个类用于数据库中的每个表,它们只执行crud操作。我的问题是这个。

当我删除一个条目时,我调用相应的存储库方法。我还需要从其他表(存储库)调用一些删除方法。这样做的最佳方法是什么?

示例代码:

DatabaseController类

public DatabaseController(){
        this.dbContext = new WSATDbContext();
    }

    private IWSATGenericRepository<Restmethod> _restmethod ;
    private IWSATGenericRepository<Soapservice> _soapservice ;

    public IWSATGenericRepository<Restmethod> Restmethod
    {
        get 
        {
            if (_restmethod == null)
            {
                _restmethod = new RestmethodRepository(dbContext);

            }
            return _restmethod;            
        }
    } 

    public IWSATGenericRepository<Soapservice> Soapservice
    {
        get 
        {
            if (_soapservice == null)
            {
                _soapservice = new SoapserviceRepository(dbContext);

            }
            return _soapservice;            
        }
    } 

示例存储库:

public class RestmethodRepository : IWSATGenericRepository<Restmethod>
{

    public RestmethodRepository(DbContext dbContext)
    {
        if (dbContext == null) 
            throw new ArgumentNullException("Null DbContext");
        this.dbContext = dbContext;
        this.dbSet = dbContext.Set<Restmethod>();
    }

    private DbContext dbContext { get; set; }
    private DbSet<Restmethod> dbSet { get; set; }

    public Restmethod get(int id)
    {   
        Restmethod restmethod = dbSet.Find(id) ;    
        dbContext.Entry(restmethod).Collection(s => s.methodkeywords).Load() ;

        return restmethod ;
    }


    public Restmethod delete(int id)
    {
        var entity = this.get(id);

        //I want to call some other repo methods here

        dbContext.Entry(entity).State = EntityState.Deleted;

        try
        {
            dbContext.SaveChanges();
        }
        catch (DbUpdateException e)
        {
            System.Diagnostics.Debug.WriteLine(e.StackTrace);
            return null;
        }

        return entity;
    }
} 

}

编辑:将“DatabaseController”UOW类作为参数传递给每个存储库是一种好习惯吗?这有什么理论问题吗?这是一个学术项目,所以我希望尽可能保持正式。

0 个答案:

没有答案