none
将缓存对象还原为实体对象(但实体对象已由两个属性变为三个属性) RRS feed

  • 问题

  • 是这样的。比方说有这样的一个实体:Video,它有两个属性Id,和Name,

    将它的实例video1存到了iis缓存中,大概有几万个缓存。

    现在因为业务需求给实体Video增加了一个属性Info,

    取缓存,进行类型转换 Video v = (Video) CacheObj;

    对于增加属性Info后缓存的对象肯定是有Info属性的,转换正常,当对于增加之前的缓存对象却只有两个属性,那么这样转换会成功吗?




    2011年5月7日 16:19

答案

  • 建议你继承video,扩展一个新的videosupper类

    对于老的还是使用video,新的使用新supper类

    另外,你这个情况实际部署的时候需要重启iis的进程,这样原来不含有info属性的类就不存在了。

     


    family as water
    2011年5月8日 13:23
  • 同意Stone Z的说法,不过略有疑问和补充?

    你因为业务需要,增加属性,肯定是要重新编写程序的,必须停止IIS然后部署,为什么IIS还会缓存中有原来的东西?建议最好停止IIS,修改好之后重新发布。类建议必须统一。

    如果你是分布式开发,建议用partial类,这样可以方便增加同一个类中的不同属性、方法事件等。VS会自动识别并且整合成一个类。


    如果你有其它意见或私下交流,请maledong@qq.com

    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处

    • 已建议为答案 mazhou 2011年5月9日 7:04
    • 已标记为答案 mldarkMember 2011年5月10日 18:19
    2011年5月9日 6:56
    版主

全部回复

  • 建议你继承video,扩展一个新的videosupper类

    对于老的还是使用video,新的使用新supper类

    另外,你这个情况实际部署的时候需要重启iis的进程,这样原来不含有info属性的类就不存在了。

     


    family as water
    2011年5月8日 13:23
  • 同意Stone Z的说法,不过略有疑问和补充?

    你因为业务需要,增加属性,肯定是要重新编写程序的,必须停止IIS然后部署,为什么IIS还会缓存中有原来的东西?建议最好停止IIS,修改好之后重新发布。类建议必须统一。

    如果你是分布式开发,建议用partial类,这样可以方便增加同一个类中的不同属性、方法事件等。VS会自动识别并且整合成一个类。


    如果你有其它意见或私下交流,请maledong@qq.com

    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处

    • 已建议为答案 mazhou 2011年5月9日 7:04
    • 已标记为答案 mldarkMember 2011年5月10日 18:19
    2011年5月9日 6:56
    版主
  • 感谢二位。

    没表达清楚啊,但问题得到解决了。

    是这样的,我们用的是分布式缓存,可能有几十万,几百万条缓存,

    这些旧缓存都缺少info属性,那么从缓存中获取的时候,Video v= cache as Video;

    对于新的缓存是没问题的,但对于就的缓存来说并不包含Info属性,而此时的Video实体是包含Info属性的,

    这样一来,转换可能就发生异常.

    测试证明,缓存中的 Video (Id,Name) 向心的实体 Video(Id,Name,Info)转换是OK的,由于就缓存对象没有Info,转换后会增加Info:null 这样的属性值。

    而反过来也同样行,Video(Id,Name,Info)向Video (Id,Name)转换,此时Info会被丢弃。

    2011年5月11日 16:27