2011-05-16 30 views
11

consigo este excepción lanzada cada vez que intento y presentar los datos a través de un formulario para esta base de datos: -No se puede insertar valor explícito para la columna de identidad en la tabla 'ClientDetails' cuando IDENTITY_INSERT está en OFF

  • Excepción

    No se puede insertar un valor explícito para la columna de identidad en la tabla 'ClientDetails' cuando IDENTITY_INSERT está establecido en OFF.

Sin embargo, la forma no tiene un campo de modo que los datos pueden entrar en la columna de identidad (PK), así que estoy en una pérdida de por qué esto está ocurriendo.

Por el momento estoy usando el asp.net mvc botón de envío estándar, pero voy a enlazar con el tiempo a un botón de diálogo jQuery

La Columna ClientNo que es dicha columna excepción se refiere a tiene la siguiente atribuye

  • Nombre - ClientNo
  • tipo - int
  • NULLS - NO
  • identidad espec - Sí
  • es la identidad - Sí
  • Incremento - 1
  • Semilla - 1

El ClientNo tiene datos 900 en adelante etc

Esta excepción también se inicia cuando se forma el cliente no tiene datos introducidos en el formulario

Su tirado en un método 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(); 
       } 
      } 
     } 

¿Alguien sabe una solución o razón de por qué esto está ocurriendo?

Gracias

+0

pegar consultar –

+0

¿Cómo se "envía" la información a la base de datos? –

+0

Este error se genera cuando desea agregar valor a la columna inicial y cuando identity_insert está desactivado. Entonces, ¿cómo estás guardando tus datos en la base de datos? –

Respuesta

8

Añadir IsDbGenerated = true Para ClientNo Propiedad

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

agradecimiento que parecía solucionar el problema – porps89

+0

No se olvide de marcar como respuesta – archil

+0

1 para conocer la respuesta antes de que el código se ha formateado correctamente – Jodrell

0

No puede suministrar valores para ser insertado en una columna de identidad como parte de un inserto. Se generan automáticamente como una parte atómica de la operación INSERT. Esto se puede deshabilitar temporalmente por tabla con el comando SET IDENTITY_INSERT.

O bien, debe modificar la base de datos de shcema, pero no lo recomiendo, no debe proporcionar un valor ni proporcionar un valor para la columna Client_NO en su inserción.

En SQL puede usar la función SCOPE_IDENTITY() para obtener el valor autogerenado. el modelo se actualizará automáticamente con este valor.

Utilice la respuesta archil para indicar al modelo que no pase esta columna en la selección generada.

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

Tenga en cuenta la edición de IsDBGenerated to the arrtributes.

Cuestiones relacionadas