记一次 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