创建替代密钥后,如何更新其数据类型?

时间:2019-04-03 07:08:47

标签: entity-framework entity-framework-core

我想更改标记为备用键的列的数据类型。

我更改了代码中的数据类型并创建了新的迁移脚本,但是该脚本引发错误。

   public class Person
    {
        [Key]
        public int PersonId { get; set; }
        public int Email { get; set; }
    }

public class TestEntities:DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("Data Source=(LocalDb)\\MSSQLLocalDB;Initial Catalog=ff;Integrated Security=SSPI;");
            base.OnConfiguring(optionsBuilder);
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Person>().HasAlternateKey(a => a.Email);
            base.OnModelCreating(modelBuilder);
        }
        public DbSet<Person> Person { get; set; }
    }

此处的电子邮件(在开发过程中错误编码的代码中的int数据类型)必须唯一。因此,我使用了流利的api使其具有独特性。 然后,我创建了初始迁移脚本并运行了该脚本 该表是使用电子邮件作为唯一键约束创建的 此时的表没有任何行。 现在,我将电子邮件的数据类型更正为字符串。 然后,我创建了第二个迁移脚本,当我尝试运行时,出现以下错误

对象“ AK_Person_Email”取决于列“ Email”。 ALTER TABLE ALTER COLUMN电子邮件失败,因为一个或多个对象访问此列。

如何更新数据类型。

1 个答案:

答案 0 :(得分:0)

您不能更改备用键(或主键,外键或索引)中包含的列的数据类型。为了实现您的目标,请删除备用键,更改列的数据类型,然后再次创建备用键。