Yes, but with both Daniel and Tuna's examples are incomplete.
if (typeof(IAuditableEntity).IsAssignableFrom(entity.GetType())) {
((IAuditableEntity) entity).Audit();
}
or
if (entity is IAuditableEntity) {
((IAuditableEntity) entity).Audit();
}
In BOTH cases you have to do TWO casts. In mine you only have to do one. I
learned in C++ where casting and boxing take cycles.
-Will
On Thu, Dec 18, 2008 at 1:17 PM, Tuna Toksöz <[email protected]> wrote:
> or
>
> if (entity is IAuditableEntity)
> ? :)
>
> On Thu, Dec 18, 2008 at 11:08 PM, Daniel Fernandes <
> [email protected]> wrote:
>
>>
>> Beside the point I know but :
>> if (typeof(IAuditableEntity).IsAssignableFrom(entity.GetType())) {
>> to
>> var auditable = entity as IAuditableEntity;
>> if (auditable != null) {
>>
>> isn't easier to read ?
>>
>>
>>
>> On Dec 18, 6:35 am, "Stefan Sedich" <[email protected]> wrote:
>> > Hello,
>> >
>> > I am setting date last modified audit on an entity, I implement an
>> > IAuditableEntity interface and use a helper to set the date modified:
>> >
>> > public override bool OnFlushDirty(object entity, object id, object[]
>> > currentState, object[] previousState, string[] propertyNames,
>> > global::NHibernate.Type.IType[] types) {
>> >
>> > if
>> (typeof(IAuditableEntity).IsAssignableFrom(entity.GetType())) {
>> >
>> > // If entity is auditable as this is only an update
>> > set the last modified date.
>> > SetValue(propertyNames, currentState, item =>
>> > item.LastModified, DateTime.Now);
>> >
>> > }
>> >
>> > return false;
>> > }
>> >
>> > Type safe helper:
>> >
>> > public void SetValue<T>(string[] propertyNames, object[] state,
>> > Expression<System.Func<IAuditableEntity, T>> propertyExpression, T
>> > value) {
>> >
>> > var memberExpression = propertyExpression.Body as
>> MemberExpression;
>> > if (memberExpression == null)
>> > throw new ArgumentException("The member expression was
>> > not a valid member expression.");
>> >
>> > string name = memberExpression.Member.Name;
>> > int index = propertyNames.ToList().IndexOf(name);
>> >
>> > if(index == -1)
>> > throw new
>> > InvalidOperationException(string.Format("Property {0} does no exist on
>> > entity.", name));
>> >
>> > state[index] = value;
>> >
>> > }
>> >
>> > Now the question is, I saw that you must set the current state and not
>> > the entity directly why would
>> >
>> > var ent = entity as IAuditableEntity;
>> > ent.LastModified = DateTime.Now;
>> >
>> > Not work properly or will it be fine to do this?
>> >
>> > Thanks
>> >
>> > --
>> > Stefan Sedich
>> > Software Developerhttp://weblogs.asp.net/stefansedich
>>
>>
>
>
> --
> Tuna Toksöz
> http://tunatoksoz.com
>
> Typos included to enhance the readers attention!
>
>
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---