I use one IDbcontext for all mycontext in project .
public interface IComBaseDbContext<TContext> where TContext : DbContext
{
DbSet<TEntity> Set<TEntity>() where TEntity : class;
void AddRange<TEntity>(IEnumerable<TEntity> entities) where TEntity : class;
void RemoveRange<TEntity>(IEnumerable<TEntity> entities) where TEntity : class;
EntityEntry<TEntity> Entry<TEntity>(TEntity entity) where TEntity : class;
void MarkAsChanged<TEntity>(TEntity entity) where TEntity : class;
// IQueryable<TEntity> Query<TEntity>() where TEntity : class;
int SaveChanges(bool acceptAllChangesOnSuccess);
int SaveChanges();
Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = new CancellationToken());
Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken());
Task<IEnumerable<TEntity>> BulkInsertAsyncz<TEntity>(IEnumerable<TEntity> entities) where TEntity : class;
Task<DbDataReader> ExecuteReaderAsyncE(string rawSql,
CancellationToken cancellationToken = default(CancellationToken), params object[] parameters);
Task<int> ExecuteNonQueryAsyncE(string rawSql,
CancellationToken cancellationToken = default(CancellationToken), params object[] parameters);
Task<object> ExecuteScalarAsyncE<T>(string rawSql, CancellationToken cancellationToken = default(CancellationToken), params object[] parameters);
DatabaseFacade Database { get; }
}
how to add all dbfunction tvf to interface same DbSet Set() where TEntity : class;
I use mycontext :
private readonly IComBaseDbContext<EngDbContext> _db;
public EngPartService(IComBaseDbContext<EngDbContext> db, IHttpContextAccessor contextAccessor, IMapper mapper)
{
_mapper = mapper;
_db = db;
}
With unit of work not access to tvf db function as lambda expression . i need to get all dbfunction from dbcontext and convert to lambda expression and add to dbcontext or add function to dbcontext for use tvf ;
same this :
public IQueryable<TResult> DbFunc<TResult>(string funName, params object[] parameters) where TResult : class
{
var dbf = _context.Model.GetDbFunctions().FirstOrDefault();
Expression body = Expression.Constant(false);
var bb= Expression.Lambda<Func<IQueryable<TResult>>>(
Expression.Call(tt.GetType(),
nameof(tt.Name),
null,
Expression.Constant(parameters),
body,null, tt.Parameters);
return null;
}