首页 > 解决方案 > ASP.NET Core:如何使用 ADO.NET(无实体框架)的工作单元创建通用存储库模式

问题描述

我正在使用带有实体框架的设计模式(通用存储库)的 ASP.NET Core。

问题是实体框架没有sql_dependency,我真的很想sql_dependency在我的项目中使用。此外,我正在使用带有通用存储库的设计模式。

我需要一种将 Ado.net 与具有工作单元的通用存储库模式一起使用的方法

我的代码:

仓库界面:

public interface IGRepository<T> where T : class
{
    IQueryable<T> GetAll();
    Task<T> GetByIdAsync(Object id);
    void Insert(T entity);
    void Update(T entity);
    void Delete(Object id);
}

工作单元界面:

public interface IUnitOfWork<T> where T : class
{
    IGRepository<T> Entity { get; }
    Task SaveAsync();
}

通用存储库:

public class GRepository<T> : IGRepository<T> where T : class
{
    private readonly DataContext _context;
    private DbSet<T> table = null;

    public GRepository(DataContext context)
    {
        _context = context;
        table = _context.Set<T>();
    }

    public async Task<T> GetByIdAsync(Object id)
    {
        return await table.FindAsync(id);
    }

    public void Delete(Object id)
    {
        T existing = table.Find(id);
        table.Remove(existing);
    }

    public IQueryable<T> GetAll()
    {
        return table.AsQueryable().AsNoTracking();
    }

    public void Insert(T entity)
    {
        table.Add(entity);
    }

    public void Update(T entity)
    {
        table.Attach(entity);
        _context.Entry(entity).State = EntityState.Modified;
    }

    //public IQueryable<T> Find(Expression<Func<T, bool>> predicate)
    //{
    //    return table.AsNoTracking().Where(predicate);
    //}

    //public IQueryable<T> Include(params Expression<Func<T, object>>[] includes)
    //{
    //    IQueryable<T> query = table;
    //    foreach (Expression<Func<T, object>> include in includes)
    //        query = query.Include(include);

    //    return query; // عندما تكون IQueryable لا تقبل query.ToList(); لأنها لأن نتيجتها هي ليست
    //}

    //public List<T> Get(Expression<Func<T, bool>> filter = null,
    //                     Func<IQueryable<T>,
    //                     IOrderedQueryable<T>> orderBy = null,
    //                     params Expression<Func<T,
    //                     object>>[] includes)
    //{

    //    IQueryable<T> query = table;

    //    foreach (Expression<Func<T, object>> include in includes)
    //        query = query.Include(include);

    //    if (filter != null)
    //        query = query.Where(filter);

    //    if (orderBy != null)
    //        query = orderBy(query);

    //    return query.ToList();
    //}
}

请帮助将其更改为 ADO.NET(无实体框架)

标签: asp.net-coregenericsdesign-patternsrepository-pattern

解决方案


推荐阅读