Bonsoir,
Je souhaite ajouter, supprimer et modifier un livre par le biais de 2 classes en utilisant CodeFirst (utilisation d'une base existante) :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class Livre { public int LivreID { get; set;} public string Titre {get; set;} public int AnneeEdition { get; set;} public virtual Auteur AutLivre { get; set;} }
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 public class Auteur { public int AuteurID {get; set;} public string Nom { get; set; } }
L'ajout et la suppression d'un livre fonctionnent : la modification de l'auteur d'un livre n'est pas prise en compte dans la base. L'update se fait bien car le titre est modifié en base.
Je ne souhaite pas ajouter la FK dans la classe Livre (j'ai testé , l'Update fonctionne)
Dans la méthode OnModelCreating, j'ai configuré :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 modelBuilder.Entity<Livre>() .HasRequired(p => p.AutLivre) .WithMany() .Map(x => x.MapKey("AuteurId"));
AuteurId est le nom de la colonne FK de la table Livre.
Voici la dernière version de ma méthode Update: la propriété AutLivre a été chargée par la sélection d'un objet Auteur dans une combo.
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 public void Update(Livre item) { using (BiblioContext db = new BiblioContext()) { try { int idA = item.AutLivre.AuteurID; var aut = db.Auteurs.Single(c => c.AuteurID == idA); item.AutLivre = aut; db.Entry(item).State = EntityState.Modified; int n = db.SaveChanges();[/INDENT] } catch (Exception ex) { throw new Exception(ex.Message); } } }
Sur certains posts, on orientait vers cette configuration
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 HasRequired(p => p.AutLivre) .WithMany() .IsIndependent() .Map(x => x.MapKey(a => a.AuteurId, "AuteurId"));
que je n'arrive pas à coder : je ne trouve pas cette méthode IsIndependant()!
Je commence à vraiment tourner en rond !
Auriez-vous des idées ?
Merci par avance
Partager