使用自定义逻辑进行实体框架数据迁移?

时间:2018-02-05 14:37:46

标签: c# sql-server entity-framework

假设我想用表A替换表B并将所有数据从一个迁移到另一个,所以我这样做:

  1. 通过 SQL查询
  2. 创建表格B
  3. 通过 SQL查询
  4. 对从A格式到B格式的整个数据副本进行转换
  5. 通过 SQL查询
  6. 将所有内容放到B表中
  7. 通过 SQL查询
  8. 删除表格A

    问题是,有时您需要中断事务并执行从非A格式到B格式的非事务性转换,这甚至可能涉及对不同服务的调用(例如,新的地理政治来自A的对象的状态,或来自A的字段的不同序列化合同,将其从A转换为B或您想要更改{{1}中的数据的任何内容})。

    所以,问题是,如何以任何理想的方式通过EF完成第2步

    1. 通过“黑匣子”执行从A格式到A格式的整个数据副本的转换
    2. 我的意思是不打破EF迁移文件的概念,并为我提供类似“Main”方法的东西作为我的迁移步骤的入口点。有什么建议吗?

1 个答案:

答案 0 :(得分:4)

不幸的是,实体框架无法实现。迁移中可用的每个操作都将转换为稍后调用的SQL操作。 (通过这种方式操作,EF允许您将整个迁移过程编写为SQL文件,并在例如SQL Server Management Studio中运行它。)

因为SQL生成与调用它是分开的,所以不可能执行自定义C#/ Python /任何非SQL。

由于迁移仅允许SQL Server提供的功能(如果支持,则允许使用不同的DB),您可以使用CLR程序集或If InStr(CStr(Sheet2.Cells(i, 18)), CStr(IssueComboBoxStr)) > 0 Then 等功能,这些功能不是最直接的使用方法,但这样可以执行任何迁移代码