Как обновить тип данных альтернативного ключа после его создания? - PullRequest
0 голосов
/ 03 апреля 2019

Я хочу изменить тип данных столбца, помеченного как альтернативный ключ.

Я изменил тип данных в коде и создал новый сценарий миграции, но сценарий выдает ошибку.

   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; }
    }

Здесь Email (тип данных int в коде, который ошибочно кодируется во время разработки) должен быть уникальным. Поэтому я использовал свободный API, чтобы сделать его уникальным. Затем я создал скрипт начальной миграции и запустил скрипт Таблица создана с электронной почтой как ограничение уникального ключа Таблица как эта точка не имеет каких-либо строк. Теперь я исправил тип сообщения электронной почты в строку. Затем я создал второй скрипт миграции и при попытке запустить я получаю следующую ошибку

Объект 'AK_Person_Email' зависит от столбца 'Email'. ALTER TABLE ALTER COLUMN Ошибка электронной почты, поскольку один или несколько объектов имеют доступ к этому столбцу.

Как обновить тип данных.

1 Ответ

0 голосов
/ 03 апреля 2019

Вы не можете изменить тип данных столбца, который включен в альтернативный ключ (или первичный ключ, внешний ключ или индекс).Чтобы достичь цели, отбросьте альтернативный ключ, измените тип данных столбца и снова создайте альтернативный ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...