EF迁移与新表格排序错误

时间:2017-06-30 21:22:51

标签: entity-framework entity-framework-6 azure-sql-database database-migration ef-migrations

我首先使用实体​​框架代码,直到最近才一直使用数据库迁移更新数据库...

我已经为AspNetUser表添加了一个新属性

public partial class AspNetUser
{
....
 public ICollection<Feed> Feeds { get; set; }
}

这是我的新表

public class Feed
    {
        public int Id { get; set; }

        public string UserId { get; set; }
        public AspNetUser User { get; set; }

        public MessageType Type { get; set; }
        public string Data { get; set; }

        public DateTime DateCreated { get; set; }

    }

这是生成的DBMigration脚本

 public override void Up()
            {
                CreateTable(
                    "dbo.Feeds",
                    c => new
                        {
                            Id = c.Int(nullable: false, identity: true),
                            UserId = c.String(nullable: false, maxLength: 128),
                            Type = c.Int(nullable: false),
                            Data = c.String(),
                            DateCreated = c.DateTime(nullable: false),
                        })
                    .PrimaryKey(t => t.Id)
                    .ForeignKey("dbo.AspNetUsers", t => t.UserId, cascadeDelete: true)
                    .Index(t => t.UserId);

            }

在Context类中:

 modelBuilder.Entity<Feed>().HasRequired(x => x.User).WithMany(x => x.Feeds).HasForeignKey(x => x.UserId);

这在localhost上创建了表,但是当我在staging上部署并运行迁移时,我得到的错误是:

专栏&#39; dbo.AspNetUsers.Id&#39;不是与引用列&#39; Feeds.UserId&#39;相同的排序规则。在外键&#39; FK_dbo.Feeds_dbo.AspNetUsers_UserId&#39;。 无法创建约束或索引。查看以前的错误。

我必须做什么......我已经采用了代码优先方法,认为这会更容易,但这真的令人沮丧。

注意:我使用的是sql Azure

2 个答案:

答案 0 :(得分:1)

两列“dbo.AspNetUsers.Id”和“Feeds.UserId”的排序规则应该相同,为了使它们相同,您可以使用下面的示例代码修改其中一列的排序规则:

context.Database.SqlCommand(“ALTER TABLE MyTable ALTER COLUMN MyColumn VARCHAR(50)COLLATE SQL_Latin1_General_CP1_CS_AS NULL”);

希望这有帮助。

此致

Alberto Morillo

答案 1 :(得分:0)

这就是我解决问题的方法,但绝不是我想要的解决方案。

  1. 从azure导出数据库的Backpac(通过azure portal)
  2. 将backpac导入SSMS(右键单击数据库&gt;导入..跟随向导)
  3. 通过右键单击db&gt;更改此处的排序规则属性&gt;选项&gt;整理下拉。
  4. 使用SSMS导出此backpac
  5. 将backpac(从步骤4)导入到azure服务器(我使用SSMS执行此操作)
  6. 将连接字符串指向新的数据库。
  7. 数据也来了,所以没有损失。

    我尝试了一些数据库迁移,它们似乎也有效。