123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- using System;
- using System.Collections.Generic;
- using System.Linq.Expressions;
- using Luticate2.Utils.Dbo.Result;
- using Microsoft.EntityFrameworkCore;
-
- namespace Luticate2.Utils.DataAccess
- {
- public abstract class LuEfDataAccess<TModel, TDbContext> : LuDataAccess
- where TModel : class
- where TDbContext : DbContext
- {
- private readonly IServiceProvider _serviceProvider;
-
- protected LuEfDataAccess(IServiceProvider serviceProvider)
- {
- _serviceProvider = serviceProvider;
- }
-
- protected abstract DbSet<TModel> GetTable(TDbContext db);
-
- public virtual LuResult<T> Execute<T>(Func<TDbContext, DbSet<TModel>, LuResult<T>> func)
- {
- try
- {
- using (var db = (TDbContext)_serviceProvider.GetService(typeof(TDbContext)))
- {
- var table = GetTable(db);
- return func(db, table);
- }
- }
- catch (Exception e)
- {
- return LuResult<T>.Error(LuStatus.DbError, e);
- }
- }
-
- public static Expression<Func<TModel, bool>> GetExpression(params KeyValuePair<string, object>[] keys)
- {
- var param = Expression.Parameter(typeof(TModel), "x");
- Expression totalExp = null;
- foreach (var pair in keys)
- {
- var equalExp = Expression.Equal(Expression.Property(param, pair.Key), Expression.Constant(pair.Value));
- totalExp = totalExp == null ? equalExp : Expression.And(equalExp, totalExp);
- }
- return Expression.Lambda<Func<TModel, bool>>(totalExp, param);
- }
-
- }
- }
|