Impossible d'insérer une valeur explicite pour l'identité de la colonne dans la table 'ClientDetails" quand IDENTITY_INSERT est réglé sur OFF
- Je obtenir cette exception générée à chaque fois que j'essaie et l'envoi de données par le biais d'un formulaire à cette base de données :-
- Exception
Impossible d'insérer une valeur explicite pour l'identité de la colonne dans la table 'ClientDetails" quand IDENTITY_INSERT est réglé sur OFF.
Toutefois, le formulaire n'est pas un champ de sorte que les données peuvent entrer dans la colonne d'identité (PK) donc je suis à une perte pour expliquer pourquoi cela se produit.
Pour le moment je suis en utilisant le standard asp.net mvc bouton soumettre, mais je vais le relier éventuellement à un dialogue jquery bouton
La ClientNo Colonne de ladite colonne, l'exception n'est en se référant à la a les attributs suivants
- Nom - ClientNo
- de type int
- NULL - PAS DE
- Identité Spec - Oui
- Est L'Identité - Oui
- Incrément - 1
- Graines - 1
La ClientNo a données à partir de 900 etc
Cette exception est également renvoyée lorsque le formulaire client n'a pas les données saisies dans le formulaire
Sa jeté sur un DataCOntext.SubmitChanges() la méthode
[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();
}
}
}
Que quelqu'un connait une solution ou la raison pourquoi cela se produit?
Merci
Comment avez-vous "présenter" les données à la base de données ?
Cette erreur est générée lorsque vous souhaitez ajouter de la valeur à la graine de colonne et quand identity_insert est éteint. Alors comment tu l'enregistrement de vos données de la base de données?
il serait bien si vous pouviez poster la requête.
Muq - à l'aide de SubmitChanges méthodes de linq to Sql classe
OriginalL'auteur porps89 | 2011-05-16
Vous devez vous connecter pour publier un commentaire.
Ajouter IsDbGenerated=true Pour ClientNo Propriété
N'oubliez pas de marquer comme réponse
+1 pour connaître la réponse avant que le code a été correctement formaté
cette réponse ne fonctionne plus! pourquoi? im obtenir cette erreur: 'Système.ComponentModel.DataAnnotations.ColumnAttribute' ne contient pas une définition pour 'IsPrimaryKey'
Assurez-vous d'utiliser le Système.Les données.Linq.La cartographie.ColumnAttribute, pas de Système.ComponentModel.DataAnnotations.ColumnAttribute
OriginalL'auteur archil
Vous ne pouvez pas fournir des valeurs à insérer dans une colonne d'Identité dans le cadre d'un insert. Ils sont générés automatiquement atomique partie de la
INSERT
opération. Cela peut être temporaily désactivé sur une base par table avec leSET IDENTITY_INSERT
commande.Soit, vous devez modifier la base de données shcema mais je ne recommande pas cette ou mieux, vous ne devriez pas fournir une valeur, ou de fournir des
NULL
de la valeur pour l'Client_NO
colonne dans votre insert.En SQL, vous pouvez utiliser le
SCOPE_IDENTITY()
fonction pour obtenir l'auto généré de la valeur. le modèle sera mis à jour automatiquement avec cette valeur.Utilisation archil's réponse à dire le modèle à ne pas passer le cette colonne dans le générés sélectionnez.
Note de l'édition de IsDBGenerated à la arrtributes.
OriginalL'auteur Jodrell