2 « méthodes »
private void Articles_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (e.Action == NotifyCollectionChangedAction.Add) { Article newArticle = e.NewItems[0] as Article; newArticle.ArticleID = Guid.NewGuid(); if (!context.Article.Contains(newArticle)) context.Article.InsertOnSubmit(newArticle); } if (e.Action == NotifyCollectionChangedAction.Remove) { Article oldArticle = e.OldItems[0] as Article; if (context.Article.Contains(oldArticle)) context.Article.DeleteOnSubmit(oldArticle); if (context.GetChangeSet().Inserts.Contains(oldArticle)) context.Article.DeleteOnSubmit(oldArticle); } } private void CurrentArticle_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { } |
Par exemple avec MVVVM ,J’ai :
private void Articles_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e) { if (e.Action == NotifyCollectionChangedAction.Add) { ArticleModel newArticle = e.NewItems[0] as ArticleModel; articleService.Add(newArticle); } if (e.Action == NotifyCollectionChangedAction.Remove) { ArticleModel oldArticle = e.OldItems[0] as ArticleModel; articleService.Remove(oldArticle); } } private void CurrentArticle_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { articleService.Update(CurrentArticle); } |
public class ArticleService :IArticleService { private TradingDataContext context = new TradingDataContext(); private List<ArticleModel> MapToModel(List<Article> articles) { List<ArticleModel> result = new List<ArticleModel>(); foreach (Article article in articles) { result.Add(article.ToModel()); } return result; } public List<ArticleModel> GetAll() { return MapToModel(context.Article.ToList()); } public void Add(ArticleModel model) { context.Article.InsertOnSubmit(model.ToEntity()); } public void Update(ArticleModel model) { if (context.Article.Where(a => a.ArticleID == model.ArticleID).Count() > 0) { Article oldArticle = context.Article.Single(a => a.ArticleID == model.ArticleID); context.Article.Attach(model.ToEntity(), oldArticle); } if (context.GetChangeSet().Inserts.Count(c => ((Article)c).ArticleID == model.ArticleID) > 0) { Article oldArticle = (Article)context.GetChangeSet().Inserts.Single(a => ((Article)a).ArticleID == model.ArticleID); context.Article.DeleteOnSubmit(oldArticle); context.Article.InsertOnSubmit(model.ToEntity()); } } public void Remove(ArticleModel model) { Article oldArticle = context.Article.Single(a => a.ArticleID == model.ArticleID); if (context.Article.Contains(oldArticle)) context.Article.DeleteOnSubmit(oldArticle); if (context.GetChangeSet().Inserts.Contains(oldArticle)) context.Article.DeleteOnSubmit(oldArticle); } public void SaveAll() { context.SubmitChanges(); } } |
Le Mapper – « Collection » correspond à une colonne de clé étrangère(CollectionID) .Attention à ne pas créer de nouvelle instance dans le sens model > Linq car sinon cela serait vu comme un élément à insérer(en gros une nouvelle collection à insérer dans la base de données)
public static class ArticleMapper { // DB > MODEL public static ArticleModel ToModel(this Article entity) { ArticleModel model = new ArticleModel() { ArticleID = entity.ArticleID, ArticleName = entity.ArticleName, Description = entity.Description, UnitPrice = entity.UnitPrice, Collection = new CollectionModel() { CollectionID = entity.Collection.CollectionID, CollectionName = entity.Collection.CollectionName } }; return model; } // MODEL > DB public static Article ToEntity(this ArticleModel model) { Article entity = new Article() { ArticleID = model.ArticleID, ArticleName = model.ArticleName, Description = model.Description, UnitPrice = model.UnitPrice, CollectionID = model.Collection.CollectionID, }; return entity; } } |