ASP.在“代码优先”数据库更新期间出现意外列
本文关键字:更新 意外 数据库 代码 代码优先 ASP | 更新日期: 2023-09-27 18:05:57
所以我今天遇到了奇怪的情况-当用新表更新现有数据库时,我在其中一个表中得到了额外的列。
它的样子:
-
Raport.cs
public class Raport { [DatabaseGenerated(DatabaseGeneratedOption.None)] [Key] public string raport_id { get; set; } //id raportu public string userID { get; set; } public DateTime creation_time { get; set; } public DateTime last_modyfication { get; set; } public virtual ICollection<ThrashType> ThrashType { get; set; } public virtual UserFrontInfo UserFrontInfo { get; set; }
}
-
ThrashType.cs
public class ThrashType { [Key] //[DatabaseGenerated(DatabaseGeneratedOption.None)] public int IdTrash { get; set; } public string RaportId { get; set; } public string ClassName { get; set; } public int Quantity { get; set; } public string Information { get; set; } public virtual Raport Raport { get; set; } }
-
UserFrontInfo.cs
public class UserFrontInfo { [DatabaseGenerated(DatabaseGeneratedOption.None)] [Key] public string userId { get; set; } public string userName { get; set; } public string whereFromName { get; set; } public virtual ICollection<Raport> Raport { get; set; } }
在遇到这种情况之前我做了什么:1/添加迁移2/因为我需要添加新的表,我遵循如下:重置实体-框架迁移(答案下第一条评论;更可读版本):
感谢Greg Gum (https://stackoverflow.com/users/425823/greg-gum)
问题:你已经搞砸了你的迁移,你想在不删除现有表的情况下重置它。问题:你做不到按照EF的要求重置数据库中现有表的迁移从头开始创建表。怎么做:删除现有的迁移从Migrations_History表。中删除现有迁移迁移文件夹。执行add-migration Reset。这将创建一个迁移到migration文件夹中,包括创建表(但它不会运行它,所以它不会出错。)现在您需要在MigrationHistory表中创建初始行,以便EF有一个当前状态的快照。如果您应用a, EF将执行此操作迁移。但是,您不能应用刚刚完成的迁移因为这些表已经存在于数据库中。所以进入迁移并注释掉"Up"方法中的所有代码。现在运行- database就。它将应用迁移(虽然实际上不是)更改数据库),并在MigrationHistory中创建快照行。现在您已经重置了迁移,可以继续正常操作迁移。
然后一切都工作得很好,但在ThrashType表中,我有额外的列名为"Raport_raport_id"。
答案是将ThrashType中的字段名称从"RaportId"更改为"raport_id",删除dbo。ThrashType并重新创建上面的步骤。
我想指出的是,我已经从上面的步骤中添加了一件事-在"number_digits_migration_file".cs中,我只注释掉了现有的表,而忽略了我想要创建的表。
虽然我解决了我的问题,但我对它很好奇。有人对代码优先方法有过这样的经验吗?祝你有美好的一天!