c# - Starcounter - 更改属性的数据类型

标签 c# starcounter

如果相应的表有现有数据,我们如何安全地更改 Starcounter 数据库类属性的 datatype

例子

现有:int PostalCode

需要:string PostalCode

最佳答案

改变数据库类的属性意味着重构数据库模式,即改变相应列的类型。此类更改不受无缝支持,并且 Starcounter 不提供任何内置工具。可以手动完成,但比较麻烦。

我看到两种方法:

  1. 使用stardump卸载数据库工具并使用 SQLite 等外部工具修改架构和数据。
  2. 通过更改应用架构的几个步骤,首先将数据从 int 列移动到 string 列,然后将列重命名为原始列。

请记住始终备份您的数据库。

我更详细地描述了第二种方法。

第一步:将数据从 int 移动到 string

  1. 向数据库类添加string 类型的新属性,例如PostalCodeString
  2. 添加并执行应用程序代码,它将遍历该类的所有实例并将 PostalCodeString 设置为从原始 int PostalCode 转换的值
  3. 停止应用程序并执行 SQL 语句以删除列:ALTER TABLE TheClassName DROP COLUMN PostalCode
  4. 从类定义中删除旧属性 PostalCode 并删除转换代码。
  5. 启动应用程序并测试它是否按预期工作

第二步:重命名列

  1. 使用旧列名称添加新属性,即 String 类型的 PostalCode
  2. 以与步骤 I 类似的方式将数据从 PostalCodeString 移动到 PostalCode,即通过应用程序代码遍历该类的所有实例。
  3. 删除列 PostalCodeString

我自己没有测试过这些步骤,但我希望它能奏效。主要关注的是在步骤 II 中创建 PostalCode

编辑:删除列 SQL 语句仅在 2017 年 12 月 18 日以来的最新候选版本中得到完全支持。

关于c# - Starcounter - 更改属性的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48010547/

相关文章:

C#:Listview LargeIcon View :消除行之间的空间

c# - 您能否以编程方式与基于组件的服务 (TrustedInstaller) 交互?

c# - DI/IoC、NHibernate 并帮助它们协同工作

c# - 如何阻止用户在不禁用列表框中选择项目

c# - 从几个重叠的 png 中创建一个 jpeg

c# - 在 Starcounter 中启用 CORS