zoukankan      html  css  js  c++  java
  • D365 FO 扩展框架缓存

    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信息。

  • 相关阅读:
    大同世界的Java 和.NET 开发
    关于Memcached 你了解多少?
    C#二进制与字符串之间的相互转换
    Nopcommerce主要用到的技术及特点
    小程序之路
    .NET方面的框架的整理和总结
    如何将FastReportOnlineDesign 灵活的应用到C/S B/S 程序当中?
    WebApi 的CRUD 的方法的应用
    关于EF 通用增删改查的封装
    基于Json序列化和反序列化通用的封装
  • 原文地址:https://www.cnblogs.com/Farseer1215/p/13164455.html
Copyright © 2011-2022 走看看