2012-01-18 2 views
3

Whenver Я пытаюсь вставить новую строку в моей таблице вручную, я получаю следующее сообщение об ошибке:ASP.NET MVC/EF - вручную назначить ID (PK)

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

Даже Тхо я установить VehicleID в моем коде, например, так:

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... 

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

My Vehi Свойство cleID имеет набор аннотаций данных [Key], может это причина?

ответ

9

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

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

    //... 
} 

... или Fluent API:

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

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

+0

Спасибо! Используя [DatabaseGenerated (DatabaseGeneratedOption.None)], я решил свою проблему – CallumVass

+0

@ Слаума, если бы я мог поднять вас 10 раз. Я бил головой об этом в течение 4 дней. СПАСИБО!!!!! – dotnetN00b

Смежные вопросы