Cascaded Behavior

You can use different object events to initiate cascaded behavior on update, activate, delete. The following example shows how to ensure that all the referenced objects are deleted when the parent object is deleted:

CallbacksExample.cs: TestCascadedDelete
01public static void TestCascadedDelete() 02 { 03 FillContainer(); 04 IObjectContainer container = OpenContainer(); 05 try { 06 // check the contents of the database 07 IObjectSet result = container.Get(null); 08 ListResult(result); 09 10 IEventRegistry registry = EventRegistryFactory.ForObjectContainer(container); 11 // register an event handler, which will delete the pilot when his car is Deleted 12 registry.Deleted += new ObjectEventHandler(OnDeleted); 13 // delete all the cars 14 result = container.Query(typeof(Car)); 15 while(result.HasNext()) { 16 container.Delete(result.Next()); 17 } 18 // check if the database is empty 19 result = container.Get(null); 20 ListResult(result); 21 } finally { 22 CloseContainer(); 23 } 24 }
CallbacksExample.cs: OnDeleted
1private static void OnDeleted(object sender, ObjectEventArgs args) 2 { 3 Object obj = args.Object; 4 if (obj is Car) 5 { 6 OpenContainer().Delete(((Car)obj).Pilot); 7 } 8 }

CallbacksExample.vb: TestCascadedDelete
01Public Shared Sub TestCascadedDelete() 02 FillContainer() 03 Dim container As IObjectContainer = OpenContainer 04 Try 05 ' check the contents of the database 06 Dim result As IObjectSet = container.Get(Nothing) 07 ListResult(result) 08 Dim registry As IEventRegistry = EventRegistryFactory.ForObjectContainer(container) 09 ' register an event handler, which will delete the pilot when his car is Deleted 10 AddHandler registry.Deleted, AddressOf OnDeleted 11 ' delete all the cars 12 result = container.Query(GetType(Car)) 13 While result.HasNext 14 container.Delete(result.Next) 15 End While 16 ' check if the database is empty 17 result = container.Get(Nothing) 18 ListResult(result) 19 Finally 20 CloseContainer() 21 End Try 22 End Sub
CallbacksExample.vb: OnDeleted
1Private Shared Sub OnDeleted(ByVal sender As Object, ByVal args As ObjectEventArgs) 2 Dim obj As Object = args.Object 3 If TypeOf obj Is Car Then 4 OpenContainer.Delete(CType(obj, Car).Pilot) 5 End If 6 End Sub