1-EntityState /Ajout d’entité au contexte
Exemple pour ajouter on peut :
dbTradingEntities context = new dbTradingEntities();
Article newArticle=new Article() { ArticleID = Guid.NewGuid(), ArticleName = "Superbe jeans", CategoryID = 1, CollectionID = 1, Description = "...", GenderName = "Homme", Reference = "ref 000", UnitPrice = 10.00m };
Soit
context.Article.Add(newArticle);
context.SaveChanges();
Soit on définit l’entityState comme ajouté
context.Entry<Article>(newArticle).State = EntityState.Added;
context.SaveChanges();
2- EntityState /Modification d’entité
Article oldArticle = context.Article.Where(a=>a.ArticleID==new Guid("9E1ABF59-7E6F-42BF-8D6F-4C48E8E95863")).First<Article>();
oldArticle.ArticleName = "Joli jeans";
context.Article.Attach(oldArticle); // état unchanged malgré les modifications
//
context.Entry<Article>(oldArticle).State = EntityState.Modified; // change l'état et pourra être sauvé
context.SaveChanges();
+ marquer un élément comme à suprrimer
context.Entry<Article>(article).State = EntityState.Deleted;
3-DbEntityEntry/Obtenir les valeurs courantes,originales,l’état d’une entité ou propriété
DbEntityEntry<Article> entry = context.Entry(oldArticle);
entry.CurrentValues
entry.OriginalValues
entry.Entity.ArticleID
entry.State
context.Entry(oldArticle).Property(a => a.ArticleName).CurrentValue ;
context.Entry(oldArticle).Property(a => a.ArticleName).OriginalValue ;
var errors = context.Entry(oldArticle).Property(a => a.ArticleName).GetValidationErrors() ;
Savoir si une propriété a été modifiée ou la marquer comme modifiée ?
bool isModified = context.Entry(oldArticle).Property(a => a.ArticleName).IsModified;
// ou
bool isModified = context.Entry(oldArticle).Property("ArticleName").IsModified;
4-ObjectContext/Récupérer la clé primaire
Obtenir un objectContext
var objectContext = ((IObjectContextAdapter)context).ObjectContext;
EntityKey key = objectContext.ObjectStateManager.GetObjectStateEntry(entry.Entity).EntityKey;
MessageBox.Show("clé : " + key.EntityKeyValues[0].Key.ToString() + " ,valeur : " + key.EntityKeyValues[0].Value.ToString());
5-Récupérer les éléments « added,modified,deleted »
On ne peut récupérer les éléments ajoutés qu’avec la collection Local
| foreach (Article article in context.Article) { switch (context.Entry<Article>(article).State) { case EntityState.Modified: break; case EntityState.Deleted: break; } } foreach (Article article in context.Article.Local) { switch (context.Entry<Article>(article).State) { case EntityState.Added: break; } } |
Exemple : la méthode d’ajout, modification, suppression ne change rien (ajout local,changement de l’état,…)
Added
Article newArticle = new Article() { ArticleID = Guid.NewGuid(), ArticleName = "Test", CategoryID = 1, CollectionID = 1, Description = "...", GenderName = "Homme", Reference = "ref 000", UnitPrice = 10.00m };
//context.Article.Local.Add(newArticle);
//context.Article.Add(newArticle);
context.Entry<Article>(newArticle).State = EntityState.Added;
Modified
Article modifiedArticle = context.Article.Where(a => a.ArticleID == new Guid("7C6B7C65-79CA-473C-8243-357DF2E7A4EB")).First<Article>();
modifiedArticle.ArticleName = "nouveau nom d'article";
context.Entry<Article>(modifiedArticle).State = EntityState.Modified;
Deleted
Article article = context.Article.First();
//context.Article.Local.Remove(article);
context.Article.Remove(article);
6-Accès concurrentiels
7-SqlQuery et ExecuteSql
// requête select
var articles =context.Database.SqlQuery<string>("select [ArticleName] from [dbo].[Article]").ToList();
//
context.Database.ExecuteSqlCommand("DELETE FROM [dbo].[Article] where [ArticleID]='041D2ADC-61DC-487C-8E3B-62DB6BA383D0' ");
ressources