Невозможно сгенерировать идентификатор с помощью аннотации данных (EF6) - PullRequest
0 голосов
/ 27 сентября 2019

Я новичок в EF6 и Asp.net MVC5.Существует проблема автоматической генерации уникального идентификатора, когда я пытаюсь создать свои сущности, используя первый подход кода.

Рассмотрим сущность, подобную этой:

        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int PostId { get; set; }
        [Required]
        [MaxLength(100), MinLength(5)]
        public string Title { get; set; }
        public string Content { get; set; }
        public string Thumbnail { get; set; }
        public string Description { get; set; }
        public DateTime DateCreated { get; set; }

Когда я помещаю [DatabaseGenerated(DatabaseGeneratedOption.Identity)] в PostIdили даже удалить его.Я всегда получал сообщение об ошибке исключения:

«Невозможно вставить значение NULL в столбец« PostId »».«Столбец не допускает пустых значений.INSERT завершается неудачей.

Я не знаю, почему EF6 всегда пытается вставить нулевое значение в столбец Id.

Затем позже я нашел решение.Я изменил

DatabaseGeneratedOption.Identity на DatabaseGeneratedOption.None

, и проблема была решена.

Однако, похоже, это решение не работает так, как я ожидал.значения, вставленные в столбец, всегда одинаковы.Это не уникально.

С ядром EF все просто, мне не нужно DatabaseGenerated, просто оставьте это соглашению.Но с EF6 я застрял.Я хочу, чтобы поле Id было уникальным и увеличивалось при каждом его добавлении в базу данных.

Может кто-нибудь помочь мне с этим?

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Когда вы применяете DatabaseGeneratedOption.Identity к своему ключевому свойству, вы говорите EF, что база данных будет генерировать идентичность.Судя по ошибке, ваш столбец PostId базы данных не настроен как идентификатор или первичный ключ.

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

0 голосов
/ 27 сентября 2019

Я также новичок в EF, но я просто создаю поле Id, и оно автоматически вставляется SQL Server, таким как эта модель, в мой текущий проект.Поле Id заполняется, как и ожидалось, когда я добавляю новые строки:

public class BlogPosts
{
    public int Id { get; set; }
    [Required]
    public string Title { get; set; }
    [Required]
    public string ShortPost { get; set; }
    [Required]
    public string Post { get; set; }
    [Required]
    public string Tags { get; set; }
    [Required]
    public DateTime Updated { get; set; }
}
...