je la structure de tableau suivant:relation one-to-Zero dans le code-première
utilisateur:
UserId
Nom
CountryId
Pays
CountryId
Nom
où CountryId dans table user est une clé foeign de la table Country.
Dans le code, j'ai les entités suivantes:
public class User
{
public int Id{get; set;}
public int CountryId {get; set;}
public virtual Country Country {get; set;}
public string Name {get; set;}
}
public class Country
{
public int Id {get; set;}
public string Name {get; set;}
}
Tableau Pays stocke une liste de 10 pays disponibles un utilisateur peut appartenir. Ne me tuez pas pour le modèle de base de données, il doit être de cette façon, les problèmes hérités.
La relation sont définis comme suit par l'api couramment:
modelBuilder.Entity<User>()
.HasRequired<Country>(c => c.Country)
.WithMany()
.HasForeignKey(c => c.CountryId);
Le problème est à chaque fois que je tente d'insérer un nouvel utilisateur dans la db, le modèle défini tente d'insérer une nouvelle entrée dans le pays table bien et je reçois l'erreur suivante:
Cannot insert the value NULL into column 'id', table '.countries'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated.
Pourquoi ef tente d'insérer un nouvel enregistrement dans la table des pays aussi bien et comment puis-je résoudre ce problème pour n'insérer un nouvel utilisateur et mettre à jour le pays utilisateur de la liste des pays déjà existants?
Pouvez-vous montrer le code qui est l'insertion de l'utilisateur? –
vous aviez raison.le problème était lors de l'insertion de l'utilisateur, au lieu de faire quelque chose comme: var pays = ctx.Countries.FirstOrDefault (c => c.Id == countryId); user.Country = pays; Je faisais user.Country = new Country {Id = countryId; Name = "bla"}, ce qui était incorrect car je créais un nouveau pays. – Elena
Cool cool. Pour l'enregistrement, vous n'avez pas besoin de sélectionner le pays du contexte, vous pouvez simplement définir 'user.CountryId = countryId'. –