ASP.NET MVC / EF - назначить идентификатор вручную (PK) - PullRequest
3 голосов
/ 18 января 2012

Всякий раз, когда я пытаюсь вставить новую строку в мою таблицу вручную, я получаю следующую ошибку:

Cannot insert the value NULL into column 'VehicleID', table 'TestServer.Vehicles'; column does not allow nulls. INSERT fails.
The statement has been terminated.

Даже если я установил идентификатор транспортного средства в своем коде, вот так:

List<Vehicles> vehicleList = context.Vehicles.ToList();

if(vehicleList.Count == 0)
{
     vehicle.VehicleID = 1;
}
else 
{
     vehicle.VehicleID = vehicleList.Last().VehicleID + 1;
}

context.Vehicles.Add(vehicle);
context.SaveChanges();

// Other code...

Причина, по которой мне нужно это сделать, заключается в том, что в этом действии я фактически обновляю другую модель, но я также хочу обновить свою модель транспортного средства, основываясь на другой модели, которую я обновляю

В свойстве VehicleID установлен аннотация [Key], может ли это быть причиной?

1 Ответ

8 голосов
/ 18 января 2012

Одной из возможных причин является то, что вы не пометили ключевое свойство в своей модели как не сгенерированное базой данных.Это можно сделать с помощью аннотаций данных ...

public class Vehicle
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int VehicleID { get; set; }

    //...
}

... или с помощью Fluent API:

modelBuilder.Entity<Vehicle>()
    .Property(v => v.VehicleID)
    .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);

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

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