0

我在 Swift 中使用 SharkORM 创建一个 SQLite 数据库,问题是我有两个使用外键的一对多关系的表,我需要知道是否有办法在这两个表上实现级联删除,

当我从主表中删除一条记录时,明细表中所有具有外键的记录都应该自动删除,我不想手动实现。

那么有没有办法使用 SharkORM 实现级联删除?我已经浏览了文档,找不到任何东西,

在此先感谢您的帮助。

4

1 回答 1

1

因此,如果您以 为例Person -> Department,其中 person 包含一个.department属性。entityWillDelete然后通过该方法级联这些删除。

一个例子是像这样的“东西”。

class Department: SRKObject {

   ...

   override func entityWillDelete() -> BOOL {
       Person.query()
             .whereWithFormat("department = %@", parameters:[self])
             .fetch()
             .removeAll()
       return true
   }

}

对于关系,总是看反面。

的文档在entityWillDelete这里提到了这一点。

/**
 * Before SharkORM attempts an operation it will ask the 
 * persitable class if it would like to continue with this operation.
 *
 * @return BOOL if YES is returned then SharkORM WILL complete the operation 
 * and it is guaranteed to complete.  All pre-requisite checks have been made 
 * and the statement compiled before getting to this point.  
 * It is safe to use this method to cascade operations to other classes. 
 * In the case of delete, you might wish to delete related records, or 
 * indeed remove this object from related tables.
 */
- (BOOL)entityWillDelete;

这一切都在事务中完成,包括所有级联和事件触发器更改。然后可以在失败/错误/中止的情况下全部回滚。

于 2017-03-30T15:08:43.920 回答