В настоящее время я изучаю ASP.NET MVC, и я учусь получать объект по его идентификатору и вставлять его ссылку на базу данных. Однако я получаю эту ошибку
Невозможно вставить явное значение для столбца идентификаторов в таблице «Аренда», если для параметра IDENTITY_INSERT установлено значение OFF
Я прочитал и заметил, что некоторые люди говорят, чтобы отключить вставку идентификатора, потому что идентификатор таблицы, на которую ссылаются, автоматически увеличивается? Однако я прочитал, что этот метод не рекомендуется, потому что он, по-видимому, блокирует таблицу или полезен только для отдельных пользователей? Могу ли я узнать, как правильно это сделать?
Это код моего контроллера, который пытается добавить новый Прокат
[HttpPost]
public IHttpActionResult CreateNewRental(RentalDTO RentalDTO)
{
if (RentalDTO.MovieIds.Count == 0)
{
return BadRequest();
}
var customer = _context.Customers.SingleOrDefault(c => c.Id == RentalDTO.CustomerId);
if (customer == null)
{
return BadRequest("Customer ID is not valid");
}
var movies = _context.Movies.Where(m => RentalDTO.MovieIds.Contains(m.Id)).ToList();
if (movies.Count != RentalDTO.MovieIds.Count)
{
return BadRequest();
}
foreach (var movie in movies)
{
if (movie.NumberAvailable < 1)
{
return BadRequest();
}
movie.NumberAvailable--;
var rental = new Rentals
{
Customer = customer,
Movie = movie,
DateRented = DateTime.Now,
};
_context.Rentals.Add(rental);
}
_context.SaveChanges();
return Ok();
}
Это моя модель проката
public class Rentals
{
public byte Id { get; set; }
[Required]
public Customers Customer { get; set; }
[Required]
public Movies Movie { get; set; }
public DateTime DateRented { get; set; }
public DateTime? DateReturned { get; set; }
}
Это миграция, которую я использовал для создания таблицы
CreateTable(
"dbo.Rentals",
c => new
{
Id = c.Byte(nullable: false, identity: true),
DateRented = c.DateTime(nullable: false),
DateReturned = c.DateTime(),
Customer_Id = c.Int(nullable: false),
Movie_Id = c.Int(nullable: false),
})
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.Customers", t => t.Customer_Id, cascadeDelete: true)
.ForeignKey("dbo.Movies", t => t.Movie_Id, cascadeDelete: true)
.Index(t => t.Customer_Id)
.Index(t => t.Movie_Id);
ОБНОВЛЕНИЕ:
Я отладил свой код и понял, что при добавлении нового проката в качестве идентификатора было установлено значение 0. Как мне установить это автоматически?