gpt4 book ai didi

c# - 代码优先迁移 - Entity Framework - 无法向表中添加列

转载 作者:可可西里 更新时间:2023-11-01 07:44:43 26 4
gpt4 key购买 nike

这个问题已经在 SO 上以不同的方式被问过很多次。我已经完成了所有的答案并且浪费了很多时间。我似乎无法正常工作。

我一直在研究 asp.net mvc Entity Framework 、SQL 服务器应用程序。我已经有一个现有的数据库、表等,一切正常。我只需要在表中添加一个新列。

所以.. 我在模型类中添加了一个属性,以便我可以将列添加到表中。但没有成功。

所以我按以下顺序执行这些步骤。

  1. 在我的模型类中添加字段。

    [Required]
    public string EmailSubject{ get; set; }
  2. 然后我删除了我的 asp.net mvc 项目中包含 Configuration.cs 类的文件夹 Migrations
  3. 然后在程序包管理器控制台中,我成功发出以下命令。

    Enable-Migrations -ContextTypeName AppointmentReminder.Data.ReminderDb -Force
  4. 然后我如下设置属性为true

    public Configuration()
    {
    AutomaticMigrationsEnabled = true;
    }
  5. 然后我在程序包管理器控制台中发出以下命令。

    Update-Database -Verbose -Force

这是我到数据库的默认连接的连接字符串的样子

Data Source=(LocalDb)\v11.0;AttachDbFilename=C:\practice\AppointmentReminder4\AppointmentReminder4\App_Data\aspnet-AppointmentReminder4-20141202060615.mdf;Initial Catalog=aspnet-AppointmentReminder4-20141202060615;Integrated Security=True

但是我无法在我想要的表中添加新列。


编辑 1

我在没有 required 属性的情况下按如下方式更新了模型并执行了上述所有步骤,但我仍然无法将列添加到表中。

public string EmailBody { get; set; }

这里是所有命令及其输出。

PM> Enable-Migrations -ContextTypeName AppointmentReminder.Data.ReminderDb -Force
Checking if the context targets an existing database...
Code First Migrations enabled for project AppointmentReminder4.
PM> Update-Database -Verbose -Force
Using StartUp project 'AppointmentReminder4'.
Using NuGet project 'AppointmentReminder4'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'aspnet-AppointmentReminder4-20141202060615' (DataSource: (LocalDb)\v11.0, Provider: System.Data.SqlClient, Origin: Configuration).
No pending explicit migrations.
Running Seed method.
PM> Update-Database -Verbose -Force
Using StartUp project 'AppointmentReminder4'.
Using NuGet project 'AppointmentReminder4'.
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Target database is: 'aspnet-AppointmentReminder4-20141202060615' (DataSource: (LocalDb)\v11.0, Provider: System.Data.SqlClient, Origin: Configuration).
No pending explicit migrations.
Running Seed method.
PM>

编辑 2终于解决了这个问题。我上面的所有步骤都是正确的。除了我正在编辑我的模型类而不是实际绑定(bind)到 ReminderDb(EF 对象)的实际数据类。在我用属性更新了正确的类之后,一切都成功了。感谢所有提供帮助的人!

最佳答案

因为该字段是必填字段,所以需要指定一个默认值。编辑您的迁移文件,找到添加您的列的行,并指定默认值应该是什么:

public override void Up()
{
AddColumn("dbo.MyTable", "EmailSubject", c => c.String(nullable: false, defaultValue: ""));
}

供引用: Default value for Required fields in Entity Framework migrations?

编辑:根据您的编辑,您需要在尝试更新之前创建迁移。参见 this example了解您通常如何使用它。

但是,如果您尝试将 Code First 迁移应用到现有数据库,这篇文章可能会有所帮助:Code First Migrations with an existing database

关于c# - 代码优先迁移 - Entity Framework - 无法向表中添加列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28054212/

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