首页 > 解决方案 > 创建替代键后如何更新其数据类型?

问题描述

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

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

   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 数据类型)需要是唯一的。所以我使用了fluent api来制作独特的。然后我创建了初始迁移脚本并运行了该脚本表是使用电子邮件作为唯一键约束创建的表因为此时没有任何行。现在我将电子邮件的数据类型更正为字符串。然后我创建了第二个迁移脚本,当我尝试运行时出现以下错误

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

你如何更新数据类型。

标签: entity-frameworkentity-framework-core

解决方案


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


推荐阅读