Entity Framework Core: столбец «Id» в таблице «Users» относится к типу, который недопустим для использования в качестве ключевого столбца в индексе. - PullRequest
0 голосов
/ 08 февраля 2020

Работает под SQLite

DbContext.cs

public class DbContext : DbContext
{
    public DbContext(DbContextOptions<DbContext> options) : base(options)
    {
    }

    public DbSet<User> Users { get; set; }
}

User.cs

public class User : OAuthUser
{
    public string FullName { get; set; }
}

OAuthUser.cs

public class OAuthUser
{
    public string Id { get; set; }

    public string Email { get; set; }

    public string UserName { get; set; }

    public string PhoneNumber { get; set; }
}

Тогда Я казнил Add-Migration и Database-Update. Он должен быть обновлен до SQLServer на моем компьютере, но он записал эту ошибку:

Столбец 'Id' в таблице 'Users' имеет тип, который недопустим для использования в качестве ключевого столбца в индексе. , Не удалось создать ограничение или индекс. См. Предыдущие ошибки.

Я хочу Id в OAuthUser.cs в качестве первичного ключа, но есть ошибка

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Требуется удалить все миграции при изменении службы базы данных.

0 голосов
/ 08 февраля 2020

Ошибка отображается из-за отсутствия спецификации StringLength. В случае первичного ключа string необходимо указать длину, поскольку первичный ключ на сервере sql является ключом с уникальным индексом.

Если вы хотите, чтобы столбец Id был первичным для string затем введите StringLength в этот столбец следующим образом:

public class OAuthUser
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [StringLength(50)]
    public string Id { get; set; }

    ...........
}

Или, если вы хотите, чтобы столбец Id был auto-generated первичным ключом, тогда он должен выглядеть следующим образом:

public class OAuthUser
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public long Id { get; set; }

    ...........
}

Вы выбираете любой из двух.

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