Pourquoi EF Essayer d'insérer NULL en colonne id?
J'écris mon projet en utilisant Entity Framework 4.0 /Premier modèle/. Au début du projet, j'ai rencontré un tel problème: j'essaie d'insérer un objet terminé dans la base de données, mais je reçois une exception:
Impossible d'insérer une valeur NULL en colonne 'CategoryId', table 'ForumDB.dbo.Categories'; la colonne n'autorise pas les valeurs null. INSERT Retomber. La demande a été interrompue.
Le code:
J'ai vérifié cet objet et je suis sûr qu'il est rempli.
Au cas où:
Que ce passe-t-il?
Impossible d'insérer une valeur NULL en colonne 'CategoryId', table 'ForumDB.dbo.Categories'; la colonne n'autorise pas les valeurs null. INSERT Retomber. La demande a été interrompue.
Le code:
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.
Au cas où:
public Category/string name, string urlName, int index/
{
CategoryId = Guid.NewGuid//;
Name = name;
UrlName = urlName;
CategoryIndex = index;
}
Que ce passe-t-il?
Aucun résultat connexe trouvé
Invité:
Pour répondre aux questions, connectez-vous ou registre
9 réponses
Emile
Confirmation de:
- entity framework peut assumer votre champ CategoryId est un identifiant et donc des transferts null Dans la base de données, l'attente de le remplir pour vous.
Hannah12
Confirmation de:
Après cela j'ai trouvé que EF Ajoutée:
À ce champ"Id", qui était la colonne d'identifiant dans SQL, Mais il a été changé pour être une application désignée.
Je pense que si vous n'avez pas cet attribut, alors EF effectivement n'enverra pas ID Dans la base de données /"Contrat de configuration"/./
Damien
Confirmation de:
Emmanuel
Confirmation de:
Ou changer votre colonne CategoryId sur identity:
Agathe
Confirmation de:
Voici comment j'ai compris cette question.
Initialement, j'ai ajouté la graine d'identité dans la colonne, mais après cela l'a supprimé.
Par conséquent, je n'ai pas compris que lorsque je modifierai d'abord la définition de la colonne dans l'identifiant de code
Alors, Entity framework J'ai découvert que ceci est la colonne Identifiant et j'ai reçu une exception ci-dessus.
Pour résoudre ce problème, j'ai ajouté ce qui suit:
La partie finale était donc approximativement comme celle-ci:
Florian
Confirmation de:
Comment c'était ;
Comment je l'ai changé
Christine
Confirmation de:
Si vous n'utilisez pas code first ou db first oracle dont create be sequnce Vous essayez de l'exécuter en utilisant une séquence
Piste.:
Emilie
Confirmation de:
Damien
Confirmation de:
J'ai allumé ces attributs dans votre int PK dans leurs modèles. /céder la place à ma graine dans configuration.cs an/
[Key]
[DatabaseGenerated/DatabaseGeneratedOption.None/]
Après avoir inséré ma graine, j'utilise l'objet SQL Server Explorer dans Visual Studio et déplacé à la table de ce modèle en cliquant avec le bouton droit de la souris sur la table et en appuyant sur 'View Designer'
https://i.stack.imgur.com/BZjZj.png
Vous trouverez ci-dessous le script créé pour créer cette table. Insérez cette commande immédiatement après la propriété principale.
https://i.stack.imgur.com/BWdq6.png
Appliquez le changement de script en appuyant sur le bouton 'Update' Présentation légèrement au-dessus du tableau /Coin gauche/
https://i.stack.imgur.com/rfH4w.png
Après avoir mis à jour la base de données, revenez à votre modèle et modifiez cet attribut:
[DatabaseGenerated/DatabaseGeneratedOption.None/]
to
[DatabaseGenerated/DatabaseGeneratedOption.Identity/]
Enregistrer, ajouter la migration, puis mettre à jour la base de données.
Chaque fois que vous insérez, cela augmentera maintenant en fonction de ce que vous avez souligné dans le script. IDENTITY.