TCA1105064 Ответов: 1

Как генерировать и автоматически увеличивать идентификатор с помощью entity framework


Почему Entity Framework не генерирует и автоматически увеличивает идентификаторы?
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Web;

namespace TwoFactorAuthentication.API.Models
{
    public class leave
    {
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity), Key()]
        public int Id { get; set; }
        public DateTime date { get; set; }
        public decimal length_hours { get; set; }
        public decimal lenght_days { get; set; }
        public int status { get; set; }
        public string comments { get; set; }
        public int leave_request_id { get; set; }
        [Required(ErrorMessage = "Leave Type ID")]
        public int leave_type_id { get; set; }
        public int emp_number { get; set; }
        [Required(ErrorMessage = "Start Time")]
        public DateTime start_time { get; set; }
        [Required(ErrorMessage = "End Time")]
        public DateTime end_time { get; set; }
        public int duration_type { get; set; }
    }
    public class leave_request
    {
        
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity), Key()]
        public int id { get; set; }
        public DateTime date_applied { get; set; }
        public int leave_type_id { get; set; }
        public int emp_number { get; set; }
        public string comments { get; set; }


    }
}

мои таблицы SQL
SELECT * FROM hrmssoft.aspnetusers;
CREATE TABLE leave_request` (
  `id` int(10) unsigned NOT NULL,
  `leave_type_id` int(10) unsigned NOT NULL,
  `date_applied` date NOT NULL,
  `emp_number` int(7) NOT NULL,
  `comments` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `emp_number` (`emp_number`),
  KEY `leave_type_id` (`leave_type_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

класс контроллера-
public async Task<ihttpactionresult> CreateLeaveRequest(ohrm_leave_request leaverequest)
        {                   
            if (!ModelState.IsValid)
            {
                return BadRequest(ModelState);
            }           
            leaverequest.date_applied = DateTime.Now;
           lvcontext.ohrm_leave_request.Add(leaverequest);           
            await lvcontext.SaveChangesAsync();
            return Ok();            
        }


Что я уже пробовал:

Моя таблица базы данных sql

id` int(10) unsigned Primary NOT NULL,

для автоматической генерации идентификатора.так что я пользуюсь
настоящий кодекс
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity), Key()]
        public int id { get; set; }

я посылаю эти ценности через почтальона
{  	"leave_type_id":"4",
     "emp_number":87,
     "comments":"Hello how are you !."
}

F-ES Sitecore

Поле id должно быть полем IDENTITY в вашей базе данных.

TCA1105064

но я не хочу устанавливать идентификационную личность.
это невозможно без "идентичности" .
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Идентичность), Ключ()]
public int id { get; set; }

F-ES Sitecore

Если вы не хотите использовать идентификатор, то у вас не может быть последовательных идентификаторов. Вы можете вручную увеличить идентификаторы самостоятельно, но это не удастся в какой-то момент из-за одновременных запросов, которые оба думают, что их ID+1 является "следующим" идентификатором. Оставляя базу данных для обработки этого материала с помощью IDENTITY, вы решаете эту проблему.

Maciej Los

Что такое поставщик баз данных?

1 Ответов

Рейтинг:
8

Dave Kreskowiak

Это происходит потому, что Entity Framework никогда не генерирует значения идентификаторов. EF вообще не имеет возможности генерировать значения идентификаторов.

То, что вы должны сделать, это сказать EF, что база данных будет генерировать значения идентификаторов и позволить базе данных генерировать их.