2016-09-07 10 views
0

因此,我今天遇到了奇怪的情况 - 在用新表更新现有数据库时,我在其中一个表中获得了额外的列。ASP.NET - 在Code First数据库更新期间出现意外的列

它是如何看起来像:

  • 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 /因为我需要追加新的表我也跟着这样的: Reset Entity-Framework Migrations (下回答第一个评论;更易读版):

学分格雷格胶这个(https://stackoverflow.com/users/425823/greg-gum

的问题:您已经打乱了你的迁移和你想 而不删除现有的表重置。问题:您不能 重置数据库中现有表的迁移,因为EF想要 从头开始创建表。解决办法:从Migrations_History表中删除现有的迁移 。从 迁移文件夹中删除现有的迁移。运行添加迁移重置。这将在您的迁移文件夹中创建一个 迁移,其中包括创建表 (但它不会运行它,因此它不会出错。)现在需要 在MigrationHistory表中创建初始行,以便EF具有 快照的现状。如果您应用 迁移,EF将执行此操作。但是,由于数据库中已存在表,因此无法应用刚刚创建的迁移 。因此请进入迁移 并注释掉“Up”方法中的所有代码。现在运行 update-database。它将应用迁移(实际上并不是 更改数据库)并在MigrationHistory中创建快照行。 您现在已重置您的迁移,并可能继续进行正常的 迁移。

然后它一切都很完美,但在ThrashType表中我有另外一个名为“Raport_raport_id”的列。

回答

0

答案是将ThrashType中的字段名称从“RaportId”更改为“raport_id”,删除dbo.ThrashType并重新创建上述步骤。

我想指出,我已经在上面的步骤中添加了一件事 - 在“number_digits_migration_file”.cs中,我仅注释了现有表,并省略了我想创建的表。

虽然我解决了我的问题,但我很好奇。有没有人有过Code First方法的这种经验?

祝您有美好的一天!

相关问题