2016-11-17 3 views
2

Я пытаюсь добавить комнату в мою базу данных, но продолжаю получать вышеуказанную ошибку и не могу понять, почему.db.SaveChanges() приводит к ошибке System.Data.Entity.Infrastructure.DbUpdateException в EntityFramework.dll

Я пытаюсь вставить:

ID: 12345 Имя: Номер

Там нет записи в базе данных с идентификатором 12345, на самом деле не существует никаких записей, я ничего не могу вставить.

Модель

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

    public string name { get; set; } 

    public virtual ICollection<RoomItem> RoomItems { get; set; } 
    public virtual ICollection<StaffRoom> StaffRooms { get; set; } 
    public virtual ICollection<RoomAudit> RoomAudit { get; set; } 
} 

Контроллер

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Create([Bind(Include = "ID, name")] Room room) 
{ 

    db.Rooms.Add(room); 
    db.SaveChanges(); 
    return RedirectToAction("Index"); 

} 

Строка соединения

<connectionStrings> 
    <add name="UniversityContext" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=RoomAudit;Integrated Security=SSPI;" providerName="System.Data.SqlClient" /> 
</connectionStrings> 

Я пытался чтобы понять это в течение нескольких часов, поэтому любая помощь получает широкую оценку.

EDIT

Полная ошибка:

Исключение типа 'System.Data.Entity.Infrastructure.DbUpdateException' произошло в EntityFramework.dll, но не был обработан в пользовательском коде

Дополнительная информация: Произошла ошибка при обновлении записей. Подробнее см. Внутреннее исключение.

Внутреннее исключение 1:

{ "при обновлении записи произошла ошибка См внутреннего исключения для деталей.."}

Внутреннего исключение 2:

{ "Невозможно вставить явное значение для . столбец идентификаторов в таблице «номер», когда IDENTITY_INSERT установлен в положение OFF "}

+0

Не могли бы вы поделиться сообщением своего исключения со всеми подробностями? Спасибо – Christos

+0

@Christos спасибо за то, что вы посмотрели - я добавил в полное исключение, что Visual Studio бросает, похоже, не очень много. – James

+0

Добро пожаловать! Обычно вся истина находится в полном сообщении об исключении. – Christos

ответ

1

проблема заключается в следующем:

Cannot insert explicit value for identity column in table 'Room' when IDENTITY_INSERT is set to OFF

ID - это столбец идентичности, и вы пытаетесь вставить его, чтобы установить это значение. Быстрое решение проблемы заключалось в том, чтобы изменить колонку и удалить ее. Однако я не уверен, что это наиболее подходящее дизайнерское решение для вашего дела. Чаще всего первичные ключи должны определяться как значения с автоматическим добавлением (идентификационные столбцы). Однако это не правило, что вы всегда должны следовать за ним. Это зависит от того, как я ранее говорил о вашем выборе дизайна.

+0

Я также заметил, что не понимал, что вы можете глубоко вникать в некоторые из Исключений. Мне нужно иметь возможность вручную устанавливать идентификаторы каждой комнаты, следовательно, мою проблему. – James

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