|
From: <fab...@us...> - 2009-05-07 03:34:47
|
Revision: 4257
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4257&view=rev
Author: fabiomaulo
Date: 2009-05-07 03:34:37 +0000 (Thu, 07 May 2009)
Log Message:
-----------
Fix NH-1765
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Action/EntityDeleteAction.cs
trunk/nhibernate/src/NHibernate/Action/EntityIdentityInsertAction.cs
trunk/nhibernate/src/NHibernate/Action/EntityInsertAction.cs
trunk/nhibernate/src/NHibernate/Action/EntityUpdateAction.cs
trunk/nhibernate/src/NHibernate/Event/AbstractEvent.cs
trunk/nhibernate/src/NHibernate/Event/PreDeleteEvent.cs
trunk/nhibernate/src/NHibernate/Event/PreInsertEvent.cs
trunk/nhibernate/src/NHibernate/Event/PreUpdateEvent.cs
trunk/nhibernate/src/NHibernate/NHibernate.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate/Event/AbstractPreDatabaseOperationEvent.cs
Modified: trunk/nhibernate/src/NHibernate/Action/EntityDeleteAction.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Action/EntityDeleteAction.cs 2009-05-06 22:59:51 UTC (rev 4256)
+++ trunk/nhibernate/src/NHibernate/Action/EntityDeleteAction.cs 2009-05-07 03:34:37 UTC (rev 4257)
@@ -117,7 +117,7 @@
bool veto = false;
if (preListeners.Length > 0)
{
- PreDeleteEvent preEvent = new PreDeleteEvent(Instance, Id, state, Persister);
+ var preEvent = new PreDeleteEvent(Instance, Id, state, Persister, (IEventSource)Session);
foreach (IPreDeleteEventListener listener in preListeners)
{
veto |= listener.OnPreDelete(preEvent);
Modified: trunk/nhibernate/src/NHibernate/Action/EntityIdentityInsertAction.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Action/EntityIdentityInsertAction.cs 2009-05-06 22:59:51 UTC (rev 4256)
+++ trunk/nhibernate/src/NHibernate/Action/EntityIdentityInsertAction.cs 2009-05-07 03:34:37 UTC (rev 4257)
@@ -121,7 +121,7 @@
IPostInsertEventListener[] postListeners = Session.Listeners.PostCommitInsertEventListeners;
if (postListeners.Length > 0)
{
- PostInsertEvent postEvent = new PostInsertEvent(Instance, generatedId, state, Persister, (IEventSource)Session);
+ var postEvent = new PostInsertEvent(Instance, generatedId, state, Persister, (IEventSource) Session);
foreach (IPostInsertEventListener listener in postListeners)
{
listener.OnPostInsert(postEvent);
@@ -135,7 +135,7 @@
bool veto = false;
if (preListeners.Length > 0)
{
- PreInsertEvent preEvent = new PreInsertEvent(Instance, null, state, Persister, Session);
+ var preEvent = new PreInsertEvent(Instance, null, state, Persister, (IEventSource) Session);
foreach (IPreInsertEventListener listener in preListeners)
{
veto |= listener.OnPreInsert(preEvent);
@@ -144,7 +144,7 @@
return veto;
}
- //Make 100% certain that this is called before any subsequent ScheduledUpdate.afterTransactionCompletion()!!
+ //Make 100% certain that this is called before any subsequent ScheduledUpdate.afterTransactionCompletion()!!
public override void AfterTransactionCompletion(bool success)
{
//TODO from H3.2: reenable if we also fix the above todo
Modified: trunk/nhibernate/src/NHibernate/Action/EntityInsertAction.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Action/EntityInsertAction.cs 2009-05-06 22:59:51 UTC (rev 4256)
+++ trunk/nhibernate/src/NHibernate/Action/EntityInsertAction.cs 2009-05-07 03:34:37 UTC (rev 4257)
@@ -154,7 +154,7 @@
bool veto = false;
if (preListeners.Length > 0)
{
- PreInsertEvent preEvent = new PreInsertEvent(Instance, Id, state, Persister, Session);
+ var preEvent = new PreInsertEvent(Instance, Id, state, Persister, (IEventSource) Session);
foreach (IPreInsertEventListener listener in preListeners)
{
veto |= listener.OnPreInsert(preEvent);
Modified: trunk/nhibernate/src/NHibernate/Action/EntityUpdateAction.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Action/EntityUpdateAction.cs 2009-05-06 22:59:51 UTC (rev 4256)
+++ trunk/nhibernate/src/NHibernate/Action/EntityUpdateAction.cs 2009-05-07 03:34:37 UTC (rev 4257)
@@ -193,7 +193,7 @@
bool veto = false;
if (preListeners.Length > 0)
{
- PreUpdateEvent preEvent = new PreUpdateEvent(Instance, Id, state, previousState, Persister, Session);
+ var preEvent = new PreUpdateEvent(Instance, Id, state, previousState, Persister, (IEventSource) Session);
foreach (IPreUpdateEventListener listener in preListeners)
{
veto |= listener.OnPreUpdate(preEvent);
Modified: trunk/nhibernate/src/NHibernate/Event/AbstractEvent.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Event/AbstractEvent.cs 2009-05-06 22:59:51 UTC (rev 4256)
+++ trunk/nhibernate/src/NHibernate/Event/AbstractEvent.cs 2009-05-07 03:34:37 UTC (rev 4257)
@@ -8,24 +8,19 @@
[Serializable]
public class AbstractEvent
{
- private readonly IEventSource session;
-
/// <summary>
/// Constructs an event from the given event session.
/// </summary>
/// <param name="source">The session event source. </param>
public AbstractEvent(IEventSource source)
{
- session = source;
+ Session = source;
}
/// <summary>
/// Returns the session event source for this event.
/// This is the underlying session from which this event was generated.
/// </summary>
- public IEventSource Session
- {
- get { return session; }
- }
+ public IEventSource Session { get; private set; }
}
}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate/Event/AbstractPreDatabaseOperationEvent.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Event/AbstractPreDatabaseOperationEvent.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate/Event/AbstractPreDatabaseOperationEvent.cs 2009-05-07 03:34:37 UTC (rev 4257)
@@ -0,0 +1,43 @@
+using System;
+using NHibernate.Engine;
+using NHibernate.Persister.Entity;
+
+namespace NHibernate.Event
+{
+ /// <summary>
+ /// Represents an operation we are about to perform against the database.
+ /// </summary>
+ [Serializable]
+ public abstract class AbstractPreDatabaseOperationEvent : AbstractEvent
+ {
+ /// <summary> Constructs an event containing the pertinent information. </summary>
+ /// <param name="source">The session from which the event originated. </param>
+ /// <param name="entity">The entity to be invloved in the database operation. </param>
+ /// <param name="id">The entity id to be invloved in the database operation. </param>
+ /// <param name="persister">The entity's persister. </param>
+ protected AbstractPreDatabaseOperationEvent(IEventSource source, object entity, object id, IEntityPersister persister)
+ : base(source)
+ {
+ Entity = entity;
+ Id = id;
+ Persister = persister;
+ }
+
+ /// <summary> The entity involved in the database operation. </summary>
+ public object Entity { get; private set; }
+
+ /// <summary> The id to be used in the database operation. </summary>
+ public object Id { get; private set; }
+
+ /// <summary>
+ /// The persister for the <see cref="Entity">.
+ /// </summary>
+ public IEntityPersister Persister { get; private set; }
+
+ [Obsolete("Use Session property instead")]
+ public ISessionImplementor Source
+ {
+ get { return Session; }
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Event/PreDeleteEvent.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Event/PreDeleteEvent.cs 2009-05-06 22:59:51 UTC (rev 4256)
+++ trunk/nhibernate/src/NHibernate/Event/PreDeleteEvent.cs 2009-05-07 03:34:37 UTC (rev 4257)
@@ -3,41 +3,29 @@
namespace NHibernate.Event
{
/// <summary>
- /// Occurs before deleting an item from the datastore
+ /// Represents a <tt>pre-delete</tt> event, which occurs just prior to
+ /// performing the deletion of an entity from the database.
/// </summary>
- public class PreDeleteEvent
+ public class PreDeleteEvent : AbstractPreDatabaseOperationEvent
{
- private readonly object entity;
- private readonly object id;
- private readonly object[] deletedState;
- private readonly IEntityPersister persister;
-
- public PreDeleteEvent(object entity, object id, object[] deletedState, IEntityPersister persister)
+ /// <summary>
+ /// Constructs an event containing the pertinent information.
+ /// </summary>
+ /// <param name="entity">The entity to be deleted. </param>
+ /// <param name="id">The id to use in the deletion. </param>
+ /// <param name="deletedState">The entity's state at deletion time. </param>
+ /// <param name="persister">The entity's persister. </param>
+ /// <param name="source">The session from which the event originated. </param>
+ public PreDeleteEvent(object entity, object id, object[] deletedState, IEntityPersister persister, IEventSource source)
+ : base(source, entity, id, persister)
{
- this.entity = entity;
- this.id = id;
- this.deletedState = deletedState;
- this.persister = persister;
+ DeletedState = deletedState;
}
- public object Entity
- {
- get { return entity; }
- }
-
- public object Id
- {
- get { return id; }
- }
-
- public object[] DeletedState
- {
- get { return deletedState; }
- }
-
- public IEntityPersister Persister
- {
- get { return persister; }
- }
+ /// <summary>
+ /// This is the entity state at the
+ /// time of deletion (useful for optomistic locking and such).
+ /// </summary>
+ public object[] DeletedState { get; private set; }
}
-}
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/Event/PreInsertEvent.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Event/PreInsertEvent.cs 2009-05-06 22:59:51 UTC (rev 4256)
+++ trunk/nhibernate/src/NHibernate/Event/PreInsertEvent.cs 2009-05-07 03:34:37 UTC (rev 4257)
@@ -1,51 +1,22 @@
-using NHibernate.Engine;
using NHibernate.Persister.Entity;
namespace NHibernate.Event
{
/// <summary>
- /// Occurs before inserting an item in the datastore
+ /// Represents a <tt>pre-insert</tt> event, which occurs just prior to
+ /// performing the insert of an entity into the database.
/// </summary>
- public class PreInsertEvent
+ public class PreInsertEvent : AbstractPreDatabaseOperationEvent
{
- private readonly object entity;
- private readonly object id;
- private readonly object[] state;
- private readonly IEntityPersister persister;
- private readonly ISessionImplementor source;
-
- public PreInsertEvent(object entity, object id, object[] state, IEntityPersister persister, ISessionImplementor source)
+ public PreInsertEvent(object entity, object id, object[] state, IEntityPersister persister, IEventSource source)
+ : base(source, entity, id, persister)
{
- this.entity = entity;
- this.id = id;
- this.state = state;
- this.persister = persister;
- this.source = source;
+ State = state;
}
- public object Entity
- {
- get { return entity; }
- }
-
- public object Id
- {
- get { return id; }
- }
-
- public object[] State
- {
- get { return state; }
- }
-
- public IEntityPersister Persister
- {
- get { return persister; }
- }
-
- public ISessionImplementor Source
- {
- get { return source; }
- }
+ /// <summary>
+ /// These are the values to be inserted.
+ /// </summary>
+ public object[] State { get; private set; }
}
}
Modified: trunk/nhibernate/src/NHibernate/Event/PreUpdateEvent.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Event/PreUpdateEvent.cs 2009-05-06 22:59:51 UTC (rev 4256)
+++ trunk/nhibernate/src/NHibernate/Event/PreUpdateEvent.cs 2009-05-07 03:34:37 UTC (rev 4257)
@@ -1,62 +1,29 @@
-using System;
-using System.Collections.Generic;
-using System.Text;
-using NHibernate.Engine;
using NHibernate.Persister.Entity;
namespace NHibernate.Event
{
/// <summary>
- /// Occurs before updating the datastore
+ /// Represents a <tt>pre-update</tt> event, which occurs just prior to
+ /// performing the update of an entity in the database.
/// </summary>
- public class PreUpdateEvent
+ public class PreUpdateEvent : AbstractPreDatabaseOperationEvent
{
- private readonly object entity;
- private readonly object id;
- private readonly object[] state;
- private readonly object[] oldState;
- private readonly IEntityPersister persister;
- private readonly ISessionImplementor source;
-
- public PreUpdateEvent(object entity, object id, object[] state, object[] oldState,
- IEntityPersister persister, ISessionImplementor source)
+ public PreUpdateEvent(object entity, object id, object[] state, object[] oldState, IEntityPersister persister,
+ IEventSource source) : base(source, entity, id, persister)
{
- this.entity = entity;
- this.id = id;
- this.state = state;
- this.oldState = oldState;
- this.persister = persister;
- this.source = source;
+ State = state;
+ OldState = oldState;
}
- public object Entity
- {
- get { return entity; }
- }
+ /// <summary>
+ /// Retrieves the state to be used in the update.
+ /// </summary>
+ public object[] State { get; private set; }
- public object Id
- {
- get { return id; }
- }
-
- public object[] State
- {
- get { return state; }
- }
-
- public object[] OldState
- {
- get { return oldState; }
- }
-
- public IEntityPersister Persister
- {
- get { return persister; }
- }
-
- public ISessionImplementor Source
- {
- get { return source; }
- }
+ /// <summary>
+ /// The old state of the entity at the time it was last loaded from the
+ /// database; can be null in the case of detached entities.
+ /// </summary>
+ public object[] OldState { get; private set; }
}
-}
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-05-06 22:59:51 UTC (rev 4256)
+++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-05-07 03:34:37 UTC (rev 4257)
@@ -471,6 +471,7 @@
<Compile Include="Driver\IfxDriver.cs" />
<Compile Include="Driver\OracleLiteDataClientDriver.cs" />
<Compile Include="EntityModeEqualityComparer.cs" />
+ <Compile Include="Event\AbstractPreDatabaseOperationEvent.cs" />
<Compile Include="Event\IDestructible.cs" />
<Compile Include="Exceptions\ReflectionBasedSqlStateExtracter.cs" />
<Compile Include="Exceptions\SqlStateExtracter.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|