As it was discussed in Deleting Structured Objects chapter, deleting a top-level object does not mean deleting all of the member objects. The same rule applies for collections. The recommendation would be to use cascadeOnDelete setting for a collection, which should be deleted with all its members.
For the following example we will use DataObject and
ListObject classes. The database will be filled up with the
FillUpDb method.
01private static void DeleteTest(){ 02
IObjectContainer db = Db4oFactory.OpenFile(DbFile); 03
try 04
{ 05
// set cascadeOnDelete in order to delete member objects 06
db.Ext().Configure().ObjectClass(typeof(ListObject)).CascadeOnDelete(true); 07
IList<ListObject> result = db.Query<ListObject>(typeof(ListObject)); 08
if (result.Count > 0) 09
{ 10
// retrieve a ListObject 11
ListObject lo1 = result[0]; 12
// delete the ListObject with all the field objects 13
db.Delete(lo1); 14
} 15
} finally { 16
db.Close(); 17
} 18
// check ListObjects and DataObjects in the database 19
db = Db4oFactory.OpenFile(DbFile); 20
try { 21
IList<ListObject> listObjects = db.Query<ListObject>(typeof(ListObject)); 22
Console.WriteLine("ListObjects in the database: " + listObjects.Count); 23
IList<DataObject> dataObjects = db.Query<DataObject>(typeof(DataObject)); 24
Console.WriteLine("DataObjects in the database: " + dataObjects.Count); 25
} finally { 26
db.Close(); 27
} 28
}
01Private Shared Sub DeleteTest() 02
Dim db As IObjectContainer = Db4oFactory.OpenFile(DbFile) 03
Try 04
' set cascadeOnDelete in order to delete member objects 05
db.Ext.Configure.ObjectClass(GetType(ListObject)).CascadeOnDelete(True) 06
Dim result As IList(Of ListObject) = db.Query(Of ListObject)(GetType(ListObject)) 07
If result.Count > 0 Then 08
' retrieve a ListObject 09
Dim lo1 As ListObject = result(0) 10
' delete the ListObject with all the field objects 11
db.Delete(lo1) 12
End If 13
Finally 14
db.Close() 15
End Try 16
' check ListObjects and DataObjects in the database 17
db = Db4oFactory.OpenFile(DbFile) 18
Try 19
Dim listObjects As IList(Of ListObject) = db.Query(Of ListObject)(GetType(ListObject)) 20
Console.WriteLine("ListObjects in the database: " + listObjects.Count.ToString()) 21
Dim dataObjects As IList(Of DataObject) = db.Query(Of DataObject)(GetType(DataObject)) 22
Console.WriteLine("DataObjects in the database: " + dataObjects.Count.ToString()) 23
Finally 24
db.Close() 25
End Try 26
End Sub