Hi Chris,
 
I was hoping that in my aspect I could find that my persistence assembly was 
calling the setter but it does not. GetCallingAssembly just returns that it is 
the Entities assembly. Damn.


----------------------------------------
> Subject: RE: Dirty Tracking Issue
> Date: Thu, 28 May 2009 15:04:50 -0600
> From: christopher.pot...@nfs.stoneriver.com
> To: user-cs@ibatis.apache.org
>
> Hi Sal:
>
> You can ask the runtime environment to tell you information such as calling 
> assembly, etc.
>
> Thanks,
> Chris
>
> Confidentiality Notice: This E-mail message, including any attachments, is 
> for the sole use of intended recipient(s) and may contain confidential and 
> privileged information. Any unauthorized review, use, disclosure or 
> distribution is prohibited. If you are not the intended recipient, please 
> contact the sender by reply email and destroy all copies of the original 
> message.
>
>
> -----Original Message-----
> From: Sal Bass [mailto:salbass...@hotmail.com]
> Sent: Thursday, May 28, 2009 3:00 PM
> To: user-cs@ibatis.apache.org
> Subject: RE: Dirty Tracking Issue
>
>
> Interesting. Then I'm wondering if I can I extend my AOP code to determine if 
> the set is coming from my Mapper assembly?
>
>
> ----------------------------------------
>> Subject: RE: Dirty Tracking Issue
>> Date: Thu, 28 May 2009 14:48:14 -0600
>> From: jeremy.as...@nfs.stoneriver.com
>> To: user-cs@ibatis.apache.org
>>
>> Sal,
>>
>> I work with Chris (ok he's my boss)
>>
>> Another thing we do is use reflection to see the calling assembly, this
>> same approach could be used for dirty checking
>>
>>
>> set
>> {
>> DateTime dtStartDate = Entity.StartDate;
>> Entity.StartDate =
>> ReportChange(Assembly.GetCallingAssembly(), ref dtStartDate, value);
>> }
>>
>>
>> ///
>> /// The implementation of each ReportChange overload.
>> ///
>>
>> [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design",
>> "CA1045:DoNotPassTypesByReference", MessageId = "1#")]
>> protected T ReportChange(Assembly a_oCallingAssembly, ref T
>> a_oOldValue, T a_oNewValue)
>> {
>> // The calling assembly is used to detect whether property
>> setters are being called from
>> // data abstraction or external, i.e. XML serialization or
>> database persistence, software.
>> ScrubData(ref a_oNewValue);
>> ScrubData(ref a_oOldValue);
>>
>> if (((a_oOldValue == null) && (a_oNewValue != null)) ||
>> ((a_oOldValue != null) &&
>> (!a_oOldValue.Equals(a_oNewValue))))
>> {
>> if
>> (a_oCallingAssembly.GetName().Name.StartsWith(_sRootNamespace))
>> {
>> ObjectIsDirty = true;
>> }
>>
>> //Validate(ref a_oNewValue);
>>
>> //assign value
>> a_oOldValue = a_oNewValue;
>>
>> }
>>
>> return a_oOldValue;
>> }
>>
>>
>> Where
>>
>> -- Lazy load example
>>
>> get
>> {
>> return
>> GetDataObject(Assembly.GetCallingAssembly(),
>> ref _oClaimFirmErrorAndOmission);
>> }
>>
>>
>>
>> ///
>> /// This method should be used by DAL-implementation only property
>> getters that load a single foreign key object.
>> /// It will perform the work of lazy loading data into a data
>> object. It will only lazy load
>> /// objects when the calling assembly is a DAL assembly. This is
>> because we don't want persistence services
>> /// to call back into themselves for lazy loading.
>> ///
>> ///
>> /// Calling assembly.
>> /// Child data object.
>> protected ImplType GetDataObject(Assembly
>> a_oCallingAssembly, ref ImplType a_oChildDataObject) where ImplType :
>> DataObject, new()
>> {
>> if
>> (a_oCallingAssembly.GetName().Name.StartsWith(_sRootNamespace))
>> {
>> GetDataObject(ref a_oChildDataObject);
>> }
>>
>> return a_oChildDataObject;
>> }
>>
>>
>>
>> -----Original Message-----
>> From: Sal Bass [mailto:salbass...@hotmail.com]
>> Sent: Thursday, May 28, 2009 1:43 PM
>> To: user-cs@ibatis.apache.org
>> Subject: RE: Dirty Tracking Issue
>>
>>
>> Could you post a brief example?
>>
>>
>> ----------------------------------------
>>> Subject: RE: Dirty Tracking Issue
>>> Date: Thu, 28 May 2009 12:34:09 -0600
>>> From: christopher.pot...@nfs.stoneriver.com
>>> To: user-cs@ibatis.apache.org
>>>
>>> Hi Sal:
>>>
>>> We've implemented a very similar piece of functionality in our
>> organization. We leveraged .Net's explicit interfaces feature to address
>> the complex property issue you describe below. The explicit interface
>> properties are used by non-iBATIS object model consumers and the actual
>> implementation properties are used by iBATIS. This allows the
>> functionality in the object model to distinguish behavior amongst
>> multiple model consumers. Another advantage we've found with this
>> approach is in the area of lazy loading. We can engage lazy loading when
>> we're a non-iBATIS object model consumer and avoid it when iBATIS is
>> populating the object model.
>>>
>>> I hope this helps,
>>> Chris Potter
>>>
>>> Confidentiality Notice: This E-mail message, including any
>> attachments, is for the sole use of intended recipient(s) and may
>> contain confidential and privileged information. Any unauthorized
>> review, use, disclosure or distribution is prohibited. If you are not
>> the intended recipient, please contact the sender by reply email and
>> destroy all copies of the original message.
>>>
>>>
>>> -----Original Message-----
>>> From: Sal Bass [mailto:salbass...@hotmail.com]
>>> Sent: Thursday, May 28, 2009 11:55 AM
>>> To: user-cs@ibatis.apache.org
>>> Subject: Dirty Tracking Issue
>>>
>>>
>>> I am having a dilema with implementing dirty tracking on my entities.
>> I am using AOP to mark an entity as "dirty" when a property is set. The
>> problem occurs when I load the entities using Ibatis because it sets the
>> properties during mapping which makes the entity dirty (no, I can't use
>> constructor mapping here). So, I use a RowDelegate to mark the entity
>> clean before returning it. Works great....except for when I am loading a
>> root object with several complex properties (ILists of other entities).
>> The RowDelegate is obviously not fired for each complex property, so
>> they are returned as dirty.
>>>
>>> Any idea of how I can get at all of the complex properties to mark
>> them clean before returning the entity?
>>>
>>>
>>>
>>> _________________________________________________________________
>>> Hotmail(r) goes with you.
>>>
>> http://windowslive.com/Tutorial/Hotmail/Mobile?ocid=TXT_TAGLM_WL_HM_Tuto
>> rial_Mobile1_052009
>> _________________________________________________________________
>> Hotmail(r) goes with you.
>> http://windowslive.com/Tutorial/Hotmail/Mobile?ocid=TXT_TAGLM_WL_HM_Tuto
>> rial_Mobile1_052009
> _________________________________________________________________
> HotmailĀ® has ever-growing storage! Don't worry about storage limits.
> http://windowslive.com/Tutorial/Hotmail/Storage?ocid=TXT_TAGLM_WL_HM_Tutorial_Storage1_052009
_________________________________________________________________
Insert movie times and more without leaving HotmailĀ®.
http://windowslive.com/Tutorial/Hotmail/QuickAdd?ocid=TXT_TAGLM_WL_HM_Tutorial_QuickAdd1_052009

Reply via email to