在使用ABP时会遇到新数据和旧数据相互结合,我们不单单要用到一个数据库,还会用到多个数据库,由于我们使用了ABP框架,所以就要学习框架中的知识点,进入代码环节。
平时我们都是继承EntityFramework下的DbContext,在ABP中需要继承AbpDbContext或者其他ABP封装的上下文,我们需要在此框架上进行进一步的扩充;
1.创建一个上下文类
在ABP的EntityFramework类库中创建
public class LQDBContext : AbpDbContext, IRepository
{
public LQDBContext()
: base("LQDBContext")
{
}
}
2.创建一些操作数据库的类库和接口
在EntityFramework文件夹添加
//操作数据库的帮助方法
public class SqlHelper : ISqlHelper, ITransientDependency
{
private readonly IDbContextProvider<LQDBContext> _dbContext;
public SqlHelper(IDbContextProvider<LQDBContext> dbContext)
{
_dbContext= dbContext;
}
/// <summary>
/// 获取数据的长度
/// </summary>
/// <param name="sql">sql语句</param>
/// <param name="parameters">需要的参数</param>
/// <returns></returns>
public int Count(string sql, params object[] parameters)
{
return _dbContext.GetDbContext().Database.ExecuteSqlCommand(sql, parameters);
}
/// <summary>
/// 获取数据
/// </summary>
/// <typeparam name="T">返回数据格式的类</typeparam>
/// <param name="sql">sql语句</param>
/// <param name="parameters">需要的参数</param>
/// <returns></returns>
public IQueryable<T> GetData<T>(string sql, params object[] parameters)
{
return _dbContext.GetDbContext().Database.SqlQuery<T>(sql, parameters).AsQueryable<T>();
}
}
//再创建一个接口类
public interface ISqlHelper
{
/// <summary>
/// 通过sql获取数据的长度
/// </summary>
/// <param name="sql"></param>
/// <param name="parameters"></param>
/// <returns>一个长度数据</returns>
int Count(string sql, params object[] parameters);
/// <summary>
/// 通过sql获取相应的集合
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <param name="parameters"></param>
/// <returns>一个集合</returns>
IQueryable<T> GetData<T>(string sql, params object[] parameters);
}
3.注册IOC容器
在EntityFramework类库下找到XXXXXXDataModule类找到Initialize方法,并且注册我们的类;
public override void Initialize()
{
IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
IocManager.Resolve();
}
4.在Application类库添加相应方法和接口
//创建一个XXXXAppService
public class AllLogAppService: IAllLogAppService
{
private readonly SqlHelper sqlHelper;
public AllLogAppService(SqlHelper _sqlHelper)
{
sqlHelper = _sqlHelper;
}
/// <summary>
/// 查询数量
/// </summary>
/// <param name="sql"></param>
/// <param name="WhereSql"></param>
/// <returns></returns>
public int Count(string sql, params object[] WhereSql)
{
return sqlHelper.Count(sql, WhereSql);
}
public IQueryable<T> GetData<T>(string sql, params object[] WhereSql)
{
return sqlHelper.GetData<T>(sql, WhereSql);
}
}
//相应接口
public interface IAllLogAppService
{
int Count(string sql, params object[] WhereSql);
IQueryable<T> GetData<T>(string sql, params object[] WhereSql);
}
5.使用方法
private readonly IAllLogAppService allLogAppService;
public IndexController(IAllLogAppService _allLogAppService)
{
allLogAppService = _allLogAppService;
}
public ActionResult Index(){
var list= allLogAppService.GetData<Authorization.Users.User>("select * from AbpUsers");
return View();
}