Pourquoi EF tente-t-il d'insérer NULL dans id-column?
Désolé pour mon anglais.
Je suis en train d'écrire mon projet à l'aide de Entity Framework 4.0 (le premier Modèle).
Au début du projet, j'ai été confrontée à ce problème: je suis en train d'essayer d'insérer l'objet rempli dans la base de données, mais j'obtiens une exception:
"Impossible d'insérer la valeur NULL dans la colonne 'CategoryId,' table 'ForumDB.dbo.Catégories'; la colonne n'autorise pas les valeurs null. INSERTION échoue. L'instruction a été arrêtée."
Category usingCategory = new Category("Using Forums", "usingforums", 0);
using (Context)
{
Context.Categories.AddObject(usingCategory);
Context.SaveChanges();
}
J'ai vérifié cet objet, et je suis sûr qu'il est rempli.
Juste au cas où:
public Category(string name, string urlName, int index)
{
CategoryId = Guid.NewGuid();
Name = name;
UrlName = urlName;
CategoryIndex = index;
}
S'il vous plaît dites-moi ce qui se passe?
Merci pour toute aide!
source d'informationauteur Kovpaev Alexey
Vous devez vous connecter pour publier un commentaire.
Ont un coup d'oeil à ceci: https://stackoverflow.com/a/5338384/171703 - entity framework peut-être en supposant que votre champ CategoryId est une identité et donc passer la valeur null à la base de données s'attendait à le remplir pour vous.
Je suis tombé sur cette aujourd'hui et pour régénérer mon EF classes à partir de la base de données.
Après avoir fait cela, j'ai trouvé que EF ajouté:
pour ce champ"Id" utilisé pour être une colonne d'Identité dans le SQL, mais a été changé pour être app-attribué.
Je pense que si vous n'avez pas d'attribut EF ne fait envoyer l'ID de la base de données (la "convention over configuration")
J'ai créé la table de l'int Id PK, mais avait oublié de définir "l'Identité de la Spécification" = True
Rencontré le même problème aujourd'hui.
Voici comment j'ai compris la question.
J'avais ajouté l'identité de la graine à la colonne au départ, mais après que je l'ai enlevé.
Donc, je ne savais pas que lors de la modification de la définition de la colonne dans le premier Code, l'Id
Propriété(x => x.Id).HasColumnName(@"Id").HasColumnType("int").IsRequired();
Afin qu'Entity framework déduit que c'était une colonne d'Identité et j'ai eu l'exception ci-dessus.
Pour résoudre ce problème, a ajouté le "HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None)" donc, la dernière pièce était quelque chose comme:
Propriété(x => x.Id).HasColumnName(@"Id").HasColumnType("int").IsRequired().HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.None);