commit 48245e6a71c2a9ba633bd2f2a9438e17af9eeb98
Author: Christian Ehringfeld <c.ehringfeld@t-online.de>
Date:   Fri Jul 31 16:56:31 2015 +0200

    fix

diff --git a/src/entityhelper.cpp b/src/entityhelper.cpp
index c06b7b6..c5e0e4a 100644
--- a/src/entityhelper.cpp
+++ b/src/entityhelper.cpp
@@ -146,6 +146,22 @@ void EntityHelper::addEntityToListProperty(const QSharedPointer<Entity>
     }
 }
 
+void EntityHelper::removeEntityFromListProperty(const QSharedPointer<Entity>
+        &entity, QSharedPointer<Entity> remove, const QMetaProperty &property) {
+    QVariant var = property.read(entity.data());
+    if (!var.isNull() && var.canConvert<QList<QVariant>>()) {
+        auto list = EntityInstanceFactory::castQVariantList(var);
+        for (int i = 0; i < list.size(); ++i) {
+            auto e = list.at(i);
+            if(e->getId() == remove->getId()) {
+                list.removeAt(i);
+                EntityHelper::setListProperty(entity, list, property);
+                break;
+            }
+        }
+    }
+}
+
 void EntityHelper::setProperty(const QSharedPointer<Entity> &entity,
                                QSharedPointer<Entity> value,
                                const QMetaProperty &property) {
diff --git a/src/entityhelper.h b/src/entityhelper.h
index 6fc7353..45864a1 100644
--- a/src/entityhelper.h
+++ b/src/entityhelper.h
@@ -31,6 +31,8 @@ class EntityHelper {
     static const QString getClassName(const Entity *entity);
     static void addEntityToListProperty(const QSharedPointer<Entity> &entity,
                                         QSharedPointer<Entity> add, const QMetaProperty &property);
+    static void removeEntityFromListProperty(const QSharedPointer<Entity> &entity,
+                                        QSharedPointer<Entity> remove, const QMetaProperty &property);
     static void setListProperty(const QSharedPointer<Entity> &entity,
                                 QList<QSharedPointer<Entity>> &list,
                                 const QMetaProperty &property);
diff --git a/src/entitymanager.cpp b/src/entitymanager.cpp
index 2ad7af7..6ecda9c 100644
--- a/src/entitymanager.cpp
+++ b/src/entitymanager.cpp
@@ -447,20 +447,18 @@ void EntityManager::removeManyToManyEntityList(const QSharedPointer<Entity> &e,
                 QSqlQuery q = builder->manyToManyDelete(
                                   tblName, builder->generateManyToManyColumnName(e),
                                   e->getProperty(e->getPrimaryKey()).toLongLong());
-                bool refresh = r.getCascadeType().contains(CascadeType::REFRESH)
-                               || r.getCascadeType().contains(CascadeType::ALL);
-                bool remove = r.getCascadeType().contains(CascadeType::REMOVE)
-                              || r.getCascadeType().contains(CascadeType::ALL);
-                if (this->schema->getDatabase()->exec(q)) {
+                if (this->db->exec(q)) {
+                    bool refresh = r.getCascadeType().contains(CascadeType::REFRESH)
+                                   || r.getCascadeType().contains(CascadeType::ALL);
+                    bool remove = r.getCascadeType().contains(CascadeType::REMOVE)
+                                  || r.getCascadeType().contains(CascadeType::ALL);
+                    auto fkProp = EntityHelper::mappedProperty(r, ptr);
                     for (int var = 0; var < list.size(); ++var) {
                         auto entity = list.at(var);
                         if (remove) {
                             this->remove(entity);
                         } else if (refresh) {
-                            /**
-                              not really with good performance, alternatively iterate over relation attribute and delete pointer from list
-                              **/
-                            this->refresh(entity);
+                            EntityHelper::removeEntityFromListProperty(entity, e, fkProp);
                         }
                     }
                 }
