gpt4 book ai didi

asp.net-core - 在不影响数据的情况下更改模型属性的数据类型

转载 作者:行者123 更新时间:2023-12-01 11:21:33 25 4
gpt4 key购买 nike

我们在我们的一个 ASP.NET MVC Core 应用程序中使用代码优先方法。我们有一个包含大量数据的表,我们希望将其中一列的数据类型从 string 更改为至 int .
该列仅存储两个整数,即“1”和“2”。我们如何在不影响数据的情况下使用包管理器控制台命令(或类似的东西)来做到这一点。
因此,在以下模型中,我们需要更改 OrderType来自 stringint不影响 SQL Server 数据库中的现有数据:

public class Order
{
public int OrderId { set; get; }
public string OrderType { set; get; }
public int OrderYear { set; get; }
public string OrderLoc { set; get; }
...
...
}
更新
我们正在使用具有最新更新的 VS2015。以下可能是对我们问题的更好解释:
在 ASP.NET Core - Code First 模型中,有时您可以对模型进行某些更改并运行迁移命令,以使更改与最初使用 Code First 方法创建的数据库保持同步。我正在寻找这样的迁移命令,因此如果模型属性的数据类型更改为兼容类型,则数据库表中相应列中的现有数据保持不变。请注意,在我们的案例中,自列 OrdererType将值 1 和 2 作为字符串保存现有数据类型 string兼容数据类型 int .

最佳答案

我解决了以下问题。以下是 我的观察 :

事实证明,在对模型进行任何更改后 - 例如添加/删除属性,更改属性的数据类型,甚至删除现有的整个模型或添加新模型 - 如果您在 Package Manager 中运行以下命令在 Visual Studio 的控制台中,将创建一个新的迁移文件 - 在 Visual Studio 的 Migrations 文件夹下 - 反射(reflect)这些更改。然后,当您运行下面显示的第二个命令时,所有新更改都将反射(reflect)在现有数据库中(最初使用 Code First 方法创建)。即model中改变的数据类型会在对应的SQL Db中发生相应的变化,model中删除/添加的属性会导致相应的SQL Db中对应表中的相应列也相应地被添加/删除等等。如果相应的新数据类型与旧数据类型等中的旧数据兼容,则此过程所有现有数据都将完好无损。

这一切是怎么发生的 : 每当我们运行 add-migration命令 Visual Studio 创建一个名为 __EFMigrationsHistory 的表在跟踪迁移文件中创建的更改的数据库中。

包管理控制台命令 :

  • 第一条命令:

    PM> add-migration myNewMigration -context myWebProjContext

  • 注意:当您运行上述命令时,以下消息会警告您在运行下一个命令之前检查新创建的迁移中的更改,该命令将更新反射(reflect)所有更改的数据库:
    An operation was scaffolded that may result in the loss of data. Please review the migration for accuracy.
    To undo this action, use Remove-Migration.
  • 第二个命令:

    PM> 更新数据库 -context myWebProjContext

  • 例如

    在对以下模型进行以下更改并运行上述命令后,SQL Db 中的 Orders 表的数据类型为 OrderType作为 tinyint,从 SQL 数据库中删除了 OrderName 和 OrderDesc 列:

    旧款
    public class Order
    {
    public int OrderId { set; get; }
    public string OrderType { set; get; }
    public int OrderYear { set; get; }
    public string OrderLoc { set; get; }
    public string OrderName { set; get; }
    public string OrderDesc { set; get; }
    }

    对以上型号的修改 : 这里我把数据类型改成了 OrderType从字符串到字节。并删除了最后两个属性 OrderNameOrderDesc
    public class Order
    {
    public int OrderId { set; get; }
    public byte OrderType { set; get; }
    public int OrderYear { set; get; }
    public string OrderLoc { set; get; }
    }

    关于asp.net-core - 在不影响数据的情况下更改模型属性的数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42071274/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com