Bonsoir,
Je suis face à un problème auquel je ne trouve pas de solution j'ai un objet Poco nommé Publication qui contient deux propriétés UserSet (objet FK User) qui lui même possède une propriété RoleSet (object FK Role).
Dans mon application MVC ma vue est Bindé au type Publication, puis dans mon action je fais appel à mon repository UserRepository afin de récupérer l'instance de User qui va bien.
Typiquement je fais cela :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 using(var repository = new UserRepository()) { model.UserSet = repository.FindByUserName(HttpContext.User.Identity.Name); }
Jusque là c'est Ok mon objet User ainsi que le sous objet Role sont récupérés correctement .
Seulement j'ai un bug lorsque je veux enregistrer mon instance de Publication en faisant cela :
En fait EF pense que l'objet User est un nouvel enregistrement et tente donc de l'ajouter en base, seulement le username étant unique j'ai une exception provenant d'SQL Server à ce sujet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 using(var repository = new PublicationRepository()) { repository.Add(model); }
Ma question est donc comment faire pour qu'EF comprenne que User n'est pas un nouvel objet ?
NB : J'ai tenté une méthode sauvage en mettant l'ensemble des repository dans un même contexte grace à cette méthode :
La par contre j'ai une erreur comme quoi que l'entity est référencée par plusieurs entity tracker.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public R RepositoryFromContext<R>() where R : IRepositoryBase { return (R)Activator.CreateInstance(typeof(R), new object[] { this.OperationContext }); }
Cordialement
Partager