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

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

  • Exception

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

Однако форма не имеет поля, поэтому данные могут вводить столбец идентификаторов (PK), поэтому я не понимаю, почему это происходит.

В настоящий момент я использую стандартную кнопку asp.net mvc submit, но в конечном итоге я свяжу ее с кнопкой диалога jquery

Столбец ClientNo, который является указанным столбцом, имеет в виду исключение, имеет следующие атрибуты

  • Имя - ClientNo
  • type - int
  • NULLS - NO
  • Спецификация идентификации - Да
  • Идентичность - Да
  • Приращение - 1
  • Семя - 1

Клиент не имеет данных 900 и т.д.

Это исключение также генерируется, когда в форме клиента нет данных, введенных в форму

Его бросили на метод DataCOntext.SubmitChanges()

[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create1(ClientDetail client)
        {
            if(ModelState.IsValid)
            { 
            client = new ClientDetail();



                UpdateModel(client);
                //Debug Code
                System.Diagnostics.Debug.WriteLine("AddNewClient Create1");
                repo.AddNewClient(client);
                //Debug Code
                System.Diagnostics.Debug.WriteLine("Save Create1");


                // System.Data.SqlClient.SqlException thrown at this line  
                repo.Save();

                //Debug Code - never reached
                System.Diagnostics.Debug.WriteLine("Saved Changes");


              //  return RedirectToAction("Details", new { id = client.ClientNo });




            }
            return View(client);
        }

public void AddNewClient(ClientDetail client)
       {    
            System.Diagnostics.Debug.WriteLine("Start Insert On Submit");

            db.ClientDetails.InsertOnSubmit(client);
            System.Diagnostics.Debug.WriteLine("Finish Insert On Submit");
       }

public void Save()
        {
            System.Diagnostics.Debug.WriteLine("In Save Method");
            db.GetChangeSet();
            System.Diagnostics.Debug.WriteLine("Got ChangeSet"); 
            db.SubmitChanges();
            System.Diagnostics.Debug.WriteLine("Exit Save Method");
        }
Is this the query everyone is talking about

[Column(Storage="_ClientNo", DbType="Int NOT NULL", IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)]
        public int ClientNo
        {
            get
            {
                return this._ClientNo;
            }
            set
            {
                if ((this._ClientNo != value))
                {
                    this.OnClientNoChanging(value);
                    this.SendPropertyChanging();
                    this._ClientNo = value;
                    this.SendPropertyChanged("ClientNo");
                    this.OnClientNoChanged();
                }
            }
        }

Кто-нибудь знает решение или причину, почему это происходит?

Спасибо

Ответ 1

Добавить IsDbGenerated = true Свойство ClientNo

[Column(Storage="_ClientNo", DbType="Int NOT NULL", **IsDbGenerated=true,** IsPrimaryKey=true, UpdateCheck=UpdateCheck.Never)] 
public int ClientNo

Ответ 2

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

Либо вы должны изменить базу данных shcema, но я не рекомендую это или лучше, вы не должны указывать значение или поставлять значение NULL для столбца Client_NO в вашей вставке.

В SQL вы можете использовать функцию SCOPE_IDENTITY() для получения значения auto genrated. модель будет автоматически обновляться с этим значением.

Используйте archil ответ, чтобы сообщить, что модель не передает этот столбец в сгенерированном элементе.

[Column(Storage="_ClientNo",
    DbType="Int NOT NULL", 
    IsDbGenerated=true,
    IsPrimaryKey=true, 
    UpdateCheck=UpdateCheck.Never)]  
public int ClientNo

Обратите внимание на версию IsDBGenerated на атрибуты.