Loading

记一次 OrchardCore 中 ContentItemIndex 误删恢复

今天临睡前突然脑抽把FreeSql 的自动迁移功能给打开了~ 当时想着是不能开的,但忘了删除掉代码~

 

后面又去搞其它代码的问题,结果弄完忘记删除启用迁移代码了。。

 

跑一遍之后就发现一些莫名其妙的报错

看看日志一堆的字段无效信息。。

列名 'ContentType' 无效。 
列名 'Owner' 无效。

 

这时候才想起来刚才的自动迁移没关。。然后看了下 CotentItemIndex 表被删了好几个字段~~

万幸的是,OC所有内容项都在Content表中有完整数据,捣鼓半天SQL JSON解析+转换,终于起来了,

下面代码留在这里或许某天能节省俩小时~

SELECT  [Id] 
      , json_value([Content],'$.ContentItemId') ContentItemId
      , json_value([Content],'$.ContentType') ContentType       
      ,  CONVERT(datetime,SUBSTRING( REPLACE(json_value([Content],'$.ModifiedUtc') ,'T',' '),0,20))ModifiedUtc
      ,  CONVERT(datetime,SUBSTRING( REPLACE(json_value([Content],'$.PublishedUtc') ,'T',' '),0,20))PublishedUtc
      ,  CONVERT(datetime,SUBSTRING( REPLACE(json_value([Content],'$.CreatedUtc') ,'T',' '),0,20))CreatedUtc
      , json_value([Content],'$.Owner') Owner
      , json_value([Content],'$.Author') Author
      , json_value([Content],'$.Published') Published
      , json_value([Content],'$.Latest') Latest 
      into #temp
  FROM [dbo].[Document]
  where Type='OrchardCore.ContentManagement.ContentItem, OrchardCore.ContentManagement.Abstractions'
  and( json_value([Content],'$.Published')  ='true' or json_value([Content],'$.Latest') ='true')
  and id in ( 
    select DocumentId from ContentItemIndex  
  )

  select * from #temp
update a set ContentType=b.ContentType,ModifiedUtc=b.ModifiedUtc,PublishedUtc=b.PublishedUtc,CreatedUtc=b.CreatedUtc,Owner=b.Owner,Author=b.Author
from ContentItemIndex a inner join #temp b on a.DocumentId=b.Id
  drop table #temp

 

posted @ 2023-04-22 02:26  韩严重  阅读(43)  评论(0编辑  收藏  举报