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
// set cascadeOnDelete in order to delete member objects 03
IConfiguration configuration = Db4oFactory.NewConfiguration(); 04
configuration.ObjectClass(typeof(ListObject)).CascadeOnDelete(true); 05
IObjectContainer db = Db4oFactory.OpenFile(configuration , Db4oFileName); 06
try 07
{ 08
IList<ListObject> result = db.Query<ListObject>(typeof(ListObject)); 09
if (result.Count > 0) 10
{ 11
// retrieve a ListObject 12
ListObject lo1 = result[0]; 13
// delete the ListObject with all the field objects 14
db.Delete(lo1); 15
} 16
} finally { 17
db.Close(); 18
} 19
// check ListObjects and DataObjects in the database 20
db = Db4oFactory.OpenFile(Db4oFileName); 21
try { 22
IList<ListObject> listObjects = db.Query<ListObject>(typeof(ListObject)); 23
Console.WriteLine("ListObjects in the database: " + listObjects.Count); 24
IList<DataObject> dataObjects = db.Query<DataObject>(typeof(DataObject)); 25
Console.WriteLine("DataObjects in the database: " + dataObjects.Count); 26
} finally { 27
db.Close(); 28
} 29
}
01Private Shared Sub DeleteTest() 02
' set cascadeOnDelete in order to delete member objects 03
Dim configuration As IConfiguration = Db4oFactory.NewConfiguration() 04
configuration.ObjectClass(GetType(ListObject)).CascadeOnDelete(True) 05
Dim db As IObjectContainer = Db4oFactory.OpenFile(configuration, Db4oFileName) 06
Try 07
Dim result As IList(Of ListObject) = db.Query(Of ListObject)(GetType(ListObject)) 08
If result.Count > 0 Then 09
' retrieve a ListObject 10
Dim lo1 As ListObject = result(0) 11
' delete the ListObject with all the field objects 12
db.Delete(lo1) 13
End If 14
Finally 15
db.Close() 16
End Try 17
' check ListObjects and DataObjects in the database 18
db = Db4oFactory.OpenFile(Db4oFileName) 19
Try 20
Dim listObjects As IList(Of ListObject) = db.Query(Of ListObject)(GetType(ListObject)) 21
Console.WriteLine("ListObjects in the database: " + listObjects.Count.ToString()) 22
Dim dataObjects As IList(Of DataObject) = db.Query(Of DataObject)(GetType(DataObject)) 23
Console.WriteLine("DataObjects in the database: " + dataObjects.Count.ToString()) 24
Finally 25
db.Close() 26
End Try 27
End Sub