首页 > 其他 > 详细

D365 FO 扩展框架缓存

时间:2020-06-19 20:32:31      阅读:66      评论:0      收藏:0      [点我收藏+]

https://www.cnblogs.com/Farseer1215/p/12845342.html
这一篇文章中介绍了,通过属性扩展的框架。
最近遇到一个问题,不小心笔误了,比如如下所示,把Female的属性不小心写成male了,然后编译是不会报错的。

 1 [Gender(Gender::Male)]
 2 public class Person_Male extends Person
 3 {
 4     public str fromWhere()
 5     {
 6         return "Mars";
 7     }
 8 
 9 }
10 
11 [Gender(Gender::male)]
12 public class Person_Female extends Person
13 {
14     public str fromWhere()
15     {
16         return "Venus";
17     }
18 
19 }

运行时,实例化的时候,会报下面的错误。
技术分享图片

 这个很好理解,因为一个属性对应了两个类,扩展框架不知道要实例化哪个类了。
接下来的事情才是诡异,笔误,改过来就行了吧?
改成正确的,如下所示:

 1 [Gender(Gender::Male)]
 2 public class Person_Male extends Person
 3 {
 4     public str fromWhere()
 5     {
 6         return "Mars";
 7     }
 8 
 9 }
10 
11 [Gender(Gender::Female)]
12 public class Person_Female extends Person
13 {
14     public str fromWhere()
15     {
16         return "Venus";
17     }
18 
19 }

就算改成正确的,它也还是会报同样的错。
开始以为是缓存的问题,整个model编译没用,各种重启没用,删掉metadata也没用,同步整个Database可以修复,但是按理说这种代码的属性不应该在database里,同步Database可以修复这个问题让人觉得不明所以。
后来跟踪了一下代码发现,SysExtension框架会把实例化得到的metadata反射信息存到SysLastValue表里,就是那张存放用户上次操作信息的表。
清理一下用户选项->应用数据,清理。
在正式环境不存在这个问题,因为每次发布都会同步数据库,同步数据库的时候会清理SysLastValue存的SysExtension信息。

D365 FO 扩展框架缓存

原文:https://www.cnblogs.com/Farseer1215/p/13164455.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!