实体框架6迁移以将Oracle中的CLOB列更改为VARCHAR

时间:2016-03-17 18:10:36

标签: oracle entity-framework entity-framework-6 ef-migrations

我正在尝试使用EF 6迁移在oracle中将CLOB列更改为VARCHAR(2000)。当EF支持迁移文件时,我在 Up()方法中有以下代码行:

AlterColumn("MTA.PLAN_SHEETS", "PLANSHEET_NAME", c => c.String(maxLength: 2000, unicode: false));

当我运行迁移时,我收到此错误

  

无效修改列

我知道在Oracle中我们无法直接将Clob更改为Varchar:
How to change a dataype CLOB TO VARCHAR2(sql)

在Entity Framework迁移中将Clob更改为Varchar的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

可能所有RDBMS都存在同样的问题。 我总是使用类似于此的代码,我认为(我很确定)这是唯一的方法。

AddColumn("MTA.PLAN_SHEETS", "TMP_COLUMN", c => c.String(maxLength: 2000, unicode: false));
Sql(@"UPDATE MTA.PLAN_SHEETS SET TMP_COLUMN = PLANSHEET_NAME");
DropColumn("MTA.PLAN_SHEETS", "PLANSHEET_NAME");
RenameColumn("MTA.PLAN_SHEETS", "TMP_COLUMN", "PLANSHEET_NAME");

答案 1 :(得分:0)

你可以使用

dbms_lob.substr(clob_column,for_how_many_bytes,from_which_byte);

例如:

从T中选择dbms_lob.substr(x,4000,1);