当请求进入application中的方法时 会开启一个工作单元    这里面调用不同的DbContext 会默认使用第一次调用的DbContext

需要手动开启工作单元来隔离两个不同的DbContext进行操作

ABP中出现这个问题 看看方法是不是异步的  返回类型是不是Task

1.比如自己封装了一个开启工作单元的方法

        public async Task NewUnitOfWork(Func<Task> Func)
{
using (var unitOfWork = unitOfWorkManager.Begin(TransactionScopeOption.RequiresNew))
{
try
{
await Func.Invoke();
await unitOfWork.CompleteAsync();
}
catch (DbUpdateException)
{ throw new UserFriendlyException("当前记录已经被使用");
}
catch (Exception ex)
{
throw new UserFriendlyException(ex.Message);
}
}
}

2.这个委托里面会写对数据库的查询操作  都是异步的  调用这个委托的时候 也是通过 await调用的 委托的返回值类型就要写Task  不然就会报上面的错误

            await delUnitOfWork.NewUnitOfWork(async () =>
{
distributorGroupModel = await customerGroupGroupRepository.GetAll()
.Where(t => t.Name == "经销商")
.Where(t => t.IsSystem == true)
.FirstOrDefaultAsync();
if (distributorGroupModel == null)
{
throw new UserFriendlyException("初始化数据不存在");
}
customer = await customerRepository.GetAsync(input.Id.Value);
});

添加DbContext   配置连接字符串方式

1.在Web项目的Startup入口配置Dbcontext连接字符串

这三种写法一样 都是获取配置文件中的连接字符串

2.非Web项目 不存在Startup入口 可以在EF的Moduel中配置连接字符串  这个参数可以 直接写连接字符串

如果这种方式报错  就改成下面这样

3.在MyDbContext中重写OnConfiguring进行配置连接字符串

可以通过注入IConfigurationRoot对象来获取appsetting.json配置文件

        private readonly IConfigurationRoot _appConfiguration;

        public Startup(IHostingEnvironment env)
{
_appConfiguration = env.GetAppConfiguration();
}

这个GetAppConfiguration是扩展方法  写在 Web.Core层  所以Application层,Core层,EF层不能引用Web.Core层  所以不能调用这个扩展方法  通过这种方式调用  其实上面那个扩展方法里面就是调用了下面这个方法

        private readonly IConfigurationRoot _appConfiguration;

        public IMSEntityFrameworkModule(IHostingEnvironment env)
{
_appConfiguration = AppConfigurations.Get(env.ContentRootPath, env.EnvironmentName, env.IsDevelopment());
}
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{ // 从 appsetting.json 中获取配置信息
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build(); optionsBuilder.UseSqlServer(config.GetConnectionString("DefaultConnection"));
}
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
configuration = ConfigManager.LoadConfig("appsettings.json");
optionsBuilder.UseSqlServer(configuration["ConnectionStrings"]);
}

一个请求需要调用两个不同的数据库 添加DbContext的更多相关文章

  1. SpringCloud的Hystrix(一) 一个消费者内的两个服务监控

    一.概念与定义 1.服务雪崩 在微服务架构中,整个系统按业务拆分出一个个服务,这些服务之间可以相互调用(RPC),为了保证服务的高可用,单个服务通常会集群部署. 但是由于网络原因或自身原因,服务并不能 ...

  2. Jmeter正则表达式提取器--将上一个请求的结果作为下一个请求的参数

    正则表达式提取器是一个后置处理器,作用是在请求完成后,从响应数据中截取一部分字符串保存到变量中,以便下一个请求使用 1.首先在线程组下添加两个HTTP请求, 2.添加好两个HTTP请求后,在每个HTT ...

  3. Spring MVC 处理一个请求的流程分析

    Spring MVC是Spring系列框架中使用频率最高的部分.不管是Spring Boot还是传统的Spring项目,只要是Web项目都会使用到Spring MVC部分.因此程序员一定要熟练掌握MV ...

  4. chrome 浏览器的预提取资源机制导致的一个请求发送两次的问题以及ClientAbortException异常

    调查一个 pdf 打印报错: ExceptionConverter: org.apache.catalina.connector.ClientAbortException: java.net.Sock ...

  5. JavaScript中一个方法同时发送两个ajax请求问题

    今天在做项目中遇到一个问题,大概是在一个jsp页面同时有一个select下拉搜索条件框和一个Bootstrap表格展示列表.这两个都要通过ajax向后台拿数据,而且要在页面加载时完成.当时的做法是: ...

  6. 调用webapi 错误:使用 HTTP 谓词 POST 向虚拟目录发送了一个请求,而默认文档是不支持 GET 或 HEAD 以外的 HTTP 谓词的静态文件。的解决方案

    第一次调用webapi出错如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http:// ...

  7. Volley缓存说明——一个请求两次回调

    从上一篇文章Android 异步网络请求框架-Volley了解volley的一些出来过程,当然也包含网络请求和缓存处理的流程,但是在此需要单独做一些说明. 我在使用过程中忽略了一个事情,就是一个网络请 ...

  8. 面试连环炮系列(十):一个线程调用两次start会怎么样

    一个线程调用两次start会怎么样 Java的线程是不允许启动两次的,第二次调用必然会抛出IllegalThreadStateException,这是一种运行时异常. 谈谈线程的生命周期和状态转移 新 ...

  9. 用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat

    用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat 摘自:https://zhidao.baidu.com/question/492732911.html @echo off ...

随机推荐

  1. Oracle之用户和表空间

    用户和表空间 看具体下载什么来操作?(oracle  11g,终端) 如果不在虚拟桌面, 它在整个总账项目里占什么位置? 如何使用? 不管学什么都要及时复习和总结,很重要. 增删改查  decode  ...

  2. 容器学习笔记之CentOS7安装Docker(安装指定版本的Docker,加速,卸载)

    0x00 概述 Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过 ...

  3. Maven工程打成一个jar包

    1:maven-shade-plugin 插件 <plugin> <groupId>org.apache.maven.plugins</groupId> <a ...

  4. 零基础Python爬虫实现(爬取最新电影排行)

    提示:本学习来自Ehco前辈的文章, 经过实现得出的笔记. 目标网站 http://dianying.2345.com/top/ 网站结构 要爬的部分,在ul标签下(包括li标签), 大致来说迭代li ...

  5. bzoj 1014 火星人prefix - 链表 - 分块

    Description 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:madamimadam,我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 6 7 ...

  6. BottomNavigationBar 底部导航控件

    BottomNavigationBar 底部导航控件 属性 说明BottomNavigationBarItem 多个 item,iconSize icon大小currentIndex 默认选中第几个o ...

  7. HihoCoder 1636 Pangu and Stones(区间DP)题解

    题意:合并石子,每次只能合并l~r堆成1堆,代价是新石堆石子个数,问最后能不能合成1堆,不能输出0,能输出最小代价 思路:dp[l][r][t]表示把l到r的石堆合并成t需要的最小代价. 当t == ...

  8. 【分布式事务】spring cloud集成lcn解决分布式事务

    参考地址:https://blog.csdn.net/u010882691/article/details/82256587 参考地址:https://blog.csdn.net/oyh1203/ar ...

  9. LogStash Download

    https://www.elastic.co/downloads/logstash 1.Download and unzip Logstash 2.Prepare a logstash.conf co ...

  10. c# 之 事务

    SqlTransaction事务的简单例子 { DataTable dt = new DataTable(); System.Data.SqlClient.SqlConnection cnn = ne ...