Beispiel #1
0
        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);
        }
Beispiel #2
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);
        }