Abp问题解决集合1
ABP学习经验
- 1. 视图中(控制器中直接使用仓储)会遇到使用实体外键,出现数据库连接关闭的错误
初学者经常会犯这样一个错误,没错说的就是我自己,这个问题折腾了我很长世间。还是没有细看文档,对abp领会不深。
开始描述问题,一开始我想着方便,因为只是一个简单的表对象输出,该表的entity每个字段都会别输出到视图,所以我想每笔要搞那么麻烦,再去建立一个Dto类,结果我在视图中尝试获取一个entity的外键对象时,出错了,错误的描述就不粘上来了,大意是数据库上下文已被注销,所以不能通过它取数据拿数据。
出现这个错误的原因很简单:
比如User类型引用Role类型。当你从数据库获取User时,Role属性并没有被填充。当你第一次读取Role属性时,才会从数据库中加载Role。所以,当你返回这样一个实体给展现层时,很容易引起副作用(从数据库中加载),而abp框架被设计为一旦service或者控制器中的action执行完毕就会自动关掉当前的数据库连接。
所以建议:
在展现层中使用实体还会有更多的问题。最佳的方案就是展现层不应该引用任何包含领域层的程序集。
- 2. Abp的多租户过滤的问题
用abp做的第一个公司项目,就是多租户的一个OA管理系统,之前公司一直用mvc,突然要换框架,老板让我带头开始搞这个新项目,没办法,只好硬着头皮上。一开始很多地方搞不定,所以这些地方还是抛弃了abp的原有设计,导致这个框架用得有些不伦不类的,没办法,时间太紧。
其中,多租户就是一个比较坑的地方。原本就是比较中意abp自动实现多租户过滤这套基础设施的,于是花了大力气做了改写了一套通过数据表生成entity和dbcontext的模板,让生成的entity会根据数据表是否包含tenantid自动继承IMayHaveTenant接口。
但是,和设计数据库的同事没沟通好,设计的数据表全都关联了另一个代表多租户的数据表的主键,这是其中的坑之一,也就是除了用户表拥有tenantid其他表都没有。
然后,当然abp多租户自动过滤功能自然有了,但是遇到一个比较悲催的问题,用户登录的时候,多租户依然会去进行过滤,这就导致用户一旦注销登陆状态后,就无法登陆了,(我的abpsession获取tenantid是从cookie中获取的),注销后tenantid是空的,查询所有用户会自动过滤所有tenantid非空的用户,导致获取不了用户
很蛋疼,当时还不知道怎么动态禁用数据自动过滤系统,所以就是用了模块启动时全局禁用多租户,在那个PreInitialize方法中设置,但是无效。所以只好去掉了用户entity继承IMayHaveTenant接口,但是问题还没完,由于项目的也无原因,必须在登陆时不存在数据库的用户进行直接注册,所以需要为新登陆的用户赋予tenantid,然而由于当前的cookie中tenantid为空,多租户机制依然还在起作用,导致不能给一个实体赋予不同于当前tenantid值。
扯了这么多,只是想描述和记录下当时踩坑过程,说实话由于abp的相关资料确实很少,网上基本上都找不到有关问题的直接解答,所以很走了一些弯路。
细看了一些文档后,终于发现如何优雅的解决上面的这个问题:
using(_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.SoftDelete))
{
var
people2 = _personRepository.GetAllList();
}
这个是禁用软删除的数据过滤,禁用多租户的应该也是可以以此种方式实现的,具体的代码文档没有,需要的自己点一下应该是能很轻易找到的。
- 3. AbpWebapi通过abp的service动态生成的如果service方法返回的对象是数据库Entity,产生“The 'ObjectContent`1' type failed to serialize the response body for content type”错误
这种情况下只能使用自定义的model类,建议使用abp的dtooutput
Abp问题解决集合1的更多相关文章
- Python跨域问题解决集合
Flask 安装插件 pip install flask-cors 使用 CORS函数配置全局路由 from flask_cors import * app = Flask(__name__) COR ...
- ABP中的本地化处理(上)
今天这篇文章主要来总结一下ABP中的多语言是怎么实现的,在后面我们将结合ABP中的源码和相关的实例来一步步进行说明,在介绍这个之前我们先来看看ABP的官方文档,通过这个文档我们就知道怎样在我们的系统中 ...
- ABP集合贴
thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>t ...
- ABP集合贴(转)
ABP集合贴 本文背景 公司最近规划的新框架准备基于ABP来搭建,自从在阳铭博客看到ABP框架的介绍后,就一直持续关注着,但还没真正在实际项目中直接使用ABP,只是自己做了一些学习和Demo.ABP所 ...
- ABP Zero示例项目登录报错“Empty or invalid anti forgery header token.”问题解决
ABP Zero项目,登录时出现如图"Empty or invalid anti forgery header token."错误提示的解决方法: 在 WebModule.cs的P ...
- ABP集合帖
http://www.cnblogs.com/kebinet/p/5341663.html http://www.cnblogs.com/farb/p/ABPAdvancedTheoryContent ...
- ABP运行Login failed for user 'IIS APPPOOL XXXXX Reason: Could not find a login matching the name provided问题解决
我们在ABP官网上面生成解决方案后,编译完成,将数据库连接字符串中的Ip改成自己的测试数据库Ip直接在Vs里面调试运行没有任何问题. 发布之后到文件夹后运行,就报如下图异常. VS里面可以跑起来,单独 ...
- 当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand问题解决
1.目前看主要因为两种,第一种是select语句没有包含主键列,select * 就可以解决.或 select 主键列 这里的主键是指的primary key而不是unique key 2.最重要的 ...
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
随机推荐
- C# EditPlus环境设置
C# EditPlus环境设置 先要设置环境变量 5.0的 C:\Program Files\MSBuild\12.0\Bin 6.0的 C:\Windows\Microsoft.NET\Fra ...
- 1--Selenium环境准备--Eclipse 添加Testng插件
Eclipse安装TestNG TestNG官网地址:http://testng.org/ 1.离线安装TestNG插件: 受网络等因素影响,在线安装方式速度比较慢,可以通过如下方式离线安装TestN ...
- SpringMvc使用FastJson做为json的转换器(注解方式)
在使用XML方式配置项目,使用fastjson做为Json转换器时通常的在XML内添加如下的配置: <mvc:message-converters register-defaults=" ...
- HDU 6098 17多校6 Inversion(思维+优化)
Problem Description Give an array A, the index starts from 1.Now we want to know Bi=maxi∤jAj , i≥2. ...
- JavaBasic_08
类的定义 [修饰符] calss 类名 [extends 父类名] [implements 接口名] { [成员变量声明;] [成员方法声明;] } 注:[]里面的东西不是必须的. 同一个java文件 ...
- [LeetCode&Python] Problem 541. Reverse String II
Given a string and an integer k, you need to reverse the first k characters for every 2k characters ...
- BZOJ 2002:Bounce 弹飞绵羊(分块)
2002: [Hnoi2010]Bounce 弹飞绵羊 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 14944 Solved: 7598 [Su ...
- HPU第四次积分赛-K :方框(水题,打印图形)
方框 描述 用'*'打印出一个nxn的字符图形(1<=n<=100). 输入 多组输入.每行输入一个n,输入EOF结束文件. 输出 输出一个满足题意的图形. 输入样例 1 1 2 5 6 ...
- HURST 1116:选美大赛(LIS+路径输出)
选美大赛 Time Limit: 1000 MS Memory Limit: 65536 K Total Submit: 1099(318 users) Total Accepted: 349(252 ...
- 实验吧—隐写术——WP之 我喜欢培根
打开解题链接: 有一点点基础的同学大概都知道这是摩尔斯电码,那么我们对他进行解密: 解密后得到: MORSEnullISnullCOOLnullBUTnullBACONnullISnullCOOLER ...