Deferred Deletion (Page 161)
5. b.
My code:
Persoon persoon = Persoon.GetPersoon(1097);
persoon.Delete();
persoon.Save();
My Call Stack:
> Framework.Data.dll!U4A.Framework.Data.Factories.U4ABusinessBaseFactory<U4A.Ceedrie.Business.Relatiemanagement.Entities.Persoon>.Update(U4A.Ceedrie.Business.Relatiemanagement.Entities.Persoon obj = {U4A.Ceedrie.Business.Relatiemanagement.Entities.Persoon}) Line 67 C#
[Lightweight Function]
Csla.dll!Csla.Reflection.MethodCaller.CallMethod(object obj = {U4A.Ceedrie.Data.Relatiemanagement.Factories.PersoonFactory}, Csla.Reflection.DynamicMethodHandle methodHandle = {Csla.Reflection.DynamicMethodHandle}, object[] parameters = {object[1]}) Line 298 + 0x1e bytes C#
Csla.dll!Csla.Reflection.MethodCaller.CallMethod(object obj = {U4A.Ceedrie.Data.Relatiemanagement.Factories.PersoonFactory}, string method = "Update", object[] parameters = {object[1]}) Line 226 + 0xe bytes C#
Csla.dll!Csla.Server.FactoryDataPortal.InvokeMethod(string factoryTypeName = "Factory Type=U4A.Ceedrie.Data.Relatiemanagement.Factories.PersoonFactory, Data.Relatiemanagement;Item Type=U4A.Ceedrie.Business.Relatiemanagement.Persoon, Business.Relatiemanagement", string methodName = "Update", object e = {U4A.Ceedrie.Business.Relatiemanagement.Entities.Persoon}, Csla.Server.DataPortalContext context = {Csla.Server.DataPortalContext}) Line 77 + 0x3f bytes C#
Csla.dll!Csla.Server.FactoryDataPortal.Update(object obj = {U4A.Ceedrie.Business.Relatiemanagement.Entities.Persoon}, Csla.Server.DataPortalContext context = {Csla.Server.DataPortalContext}) Line 158 + 0x4e bytes C#
Csla.dll!Csla.Server.DataPortalSelector.Update(object obj = {U4A.Ceedrie.Business.Relatiemanagement.Entities.Persoon}, Csla.Server.DataPortalContext context = {Csla.Server.DataPortalContext}) Line 110 + 0x10 bytes C#
Csla.dll!Csla.Server.DataPortal.Update(object obj = {U4A.Ceedrie.Business.Relatiemanagement.Entities.Persoon}, Csla.Server.DataPortalContext context = {Csla.Server.DataPortalContext}) Line 278 + 0xf bytes C#
Csla.dll!Csla.DataPortalClient.LocalProxy.Update(object obj = {U4A.Ceedrie.Business.Relatiemanagement.Entities.Persoon}, Csla.Server.DataPortalContext context = {Csla.Server.DataPortalContext}) Line 55 + 0x18 bytes C#
Csla.dll!Csla.DataPortal.Update(object obj = {U4A.Ceedrie.Business.Relatiemanagement.Entities.Persoon}) Line 460 + 0xf bytes C#
Csla.dll!Csla.DataPortal.Update<Csla.BusinessBase<U4A.Ceedrie.Business.Relatiemanagement.Entities.Relatie>>(Csla.BusinessBase<U4A.Ceedrie.Business.Relatiemanagement.Entities.Relatie> obj = {U4A.Ceedrie.Business.Relatiemanagement.Entities.Persoon}) Line 336 + 0x8 bytes C#
Csla.dll!Csla.BusinessBase<U4A.Ceedrie.Business.Relatiemanagement.Entities.Relatie>.Save() Line 125 + 0x46 bytes C#
Business.Relatiemanagement.dll!U4A.Ceedrie.Business.Relatiemanagement.Entities.Persoon.Save() Line 85 + 0x8 bytes C#
Relatiemanagement.dll!
Btw, i forgot to mention that the Immediate deletion works fine. DataPortal.Delete()
It's only the defered deletion which reach the Update method instead of Delete method in de objectfactory.
I think you may be reading that page a little too closely.
"the business developer must provide both a factory class and the business class. The factory class must implement a delete method that ..."
The book doesn't say that the factory delete method will be called. It says you have to have one. I think you just proved the Update method gets called. In there, you have to call your delete method.
Joe
Ok, it seems somehow logic to me that the update method is being called. In must then implement another 'target.IsDeleted' in my base class just like i did for target.IsNew and target.IsDirty. The standard Csla-ObjectFactory base class doesn't provide this information.
Still section 5.b on page 161 points out that the specified delete method will be invoked by the dataportal. Maybe im just plain stupid ;)
Anyway maybe it can be added as wish work item on the bug tracker site.
- make IsNew accessable
- make IsDirty accessable
- make IsDeleted accessable
Copyright (c) Marimer LLC