private int OnSaveChanges2() { ChangeTracker.DetectChanges(); var manager = CurrentObjectContext.ObjectStateManager; var modified = manager.GetObjectStateEntries(EntityState.Modified); var added = manager.GetObjectStateEntries(EntityState.Added); var deleted = manager.GetObjectStateEntries(EntityState.Deleted); if (Database.Connection.State == System.Data.ConnectionState.Closed) { Database.Connection.Open(); } using (var transaction = Database.Connection.BeginTransaction()) { Cnn.ExternalTransaction = transaction; UpdateObjectStateEntries(modified, (content, item) => item.GetModifiedProperties().ToArray(), true); UpdateObjectStateEntries(added, (content, item) => GetProperties(content), false); foreach (var deletedItem in deleted) { var article = (IQPArticle)deletedItem.Entity; Cnn.DeleteContentItem(article.Id); } transaction.Commit(); Cnn.ExternalTransaction = null; } Database.Connection.Close(); return(0); }
private int OnSaveChanges2() { ChangeTracker.DetectChanges(); var modified = ChangeTracker.Entries() .Where(x => x.State == EntityState.Modified && x.Entity != null) .ToList(); var added = ChangeTracker.Entries() .Where(x => x.State == EntityState.Added && x.Entity != null) .ToList(); var deleted = ChangeTracker.Entries() .Where(x => x.State == EntityState.Deleted && x.Entity != null) .ToList(); var connection = Database.GetDbConnection(); if (connection.State == System.Data.ConnectionState.Closed) { connection.Open(); } if (Cnn.ExternalTransaction != null) { UpdateObjectStateEntries(modified, (content, item) => item.Properties.Where(x => x.IsModified).Select(x => x.Metadata.Name).ToArray(), true); UpdateObjectStateEntries(added, (content, item) => GetProperties(content), false); foreach (var deletedItem in deleted) { var article = (IQPArticle)deletedItem.Entity; Cnn.DeleteContentItem(article.Id); } } else { using (var transaction = Database.BeginTransaction()) { Cnn.ExternalTransaction = transaction.GetDbTransaction(); UpdateObjectStateEntries(modified, (content, item) => item.Properties.Where(x => x.IsModified).Select(x => x.Metadata.Name).ToArray(), true); UpdateObjectStateEntries(added, (content, item) => GetProperties(content), false); foreach (var deletedItem in deleted) { var article = (IQPArticle)deletedItem.Entity; Cnn.DeleteContentItem(article.Id); } transaction.Commit(); Cnn.ExternalTransaction = null; } } //connection.Close(); ChangeTracker.AcceptAllChanges(); return(0); }