标签:
ABP学习经验
初学者经常会犯这样一个错误,没错说的就是我自己,这个问题折腾了我很长世间。还是没有细看文档,对abp领会不深。
开始描述问题,一开始我想着方便,因为只是一个简单的表对象输出,该表的entity每个字段都会别输出到视图,所以我想每笔要搞那么麻烦,再去建立一个Dto类,结果我在视图中尝试获取一个entity的外键对象时,出错了,错误的描述就不粘上来了,大意是数据库上下文已被注销,所以不能通过它取数据拿数据。
出现这个错误的原因很简单:
比如User类型引用Role类型。当你从数据库获取User时,Role属性并没有被填充。当你第一次读取Role属性时,才会从数据库中加载Role。所以,当你返回这样一个实体给展现层时,很容易引起副作用(从数据库中加载),而abp框架被设计为一旦service或者控制器中的action执行完毕就会自动关掉当前的数据库连接。
所以建议:
在展现层中使用实体还会有更多的问题。最佳的方案就是展现层不应该引用任何包含领域层的程序集。
using(_unitOfWorkManager.Current.DisableFilter(AbpDataFilters.SoftDelete)) {
var people2 = _personRepository.GetAllList();
}
标签:
原文地址:http://www.cnblogs.com/xuzimian/p/5575628.html