Update: Repository Monitor

This commit is contained in:
Gary Sharp
2013-04-30 12:39:59 +10:00
parent e04296bbed
commit a6cfd5a63a
3 changed files with 30 additions and 5 deletions
@@ -79,9 +79,11 @@ namespace Disco.Data.Repository.Monitor
var entryState = stateManager.GetObjectStateEntry(monitorEvent.Entity);
monitorEvent.EntityKey = entryState.EntityKey.EntityKeyValues.Select(kv => kv.Value).ToArray();
}
monitorEvent.afterCommit = true;
}
internal static RepositoryMonitorEvent EventFromEntryState(DiscoDataContext dbContext, DbEntityEntry dbEntryState, ObjectStateEntry entryState)
internal static RepositoryMonitorEvent EventFromEntryState(DiscoDataContext dbContext, DbEntityEntry dbEntryState, ObjectStateEntry objectEntryState)
{
RepositoryMonitorEventType eventType;
string[] modifiedProperties = null;
@@ -113,14 +115,16 @@ namespace Disco.Data.Repository.Monitor
// Only pass modified properties on Modified Event (Ignore Added/Deleted)
if (eventType == RepositoryMonitorEventType.Modified)
modifiedProperties = entryState.GetModifiedProperties().ToArray();
modifiedProperties = objectEntryState.GetModifiedProperties().ToArray();
// Don't pass entity key when entity newly added
if (eventType != RepositoryMonitorEventType.Added)
entityKey = entryState.EntityKey.EntityKeyValues.Select(kv => kv.Value).ToArray();
entityKey = objectEntryState.EntityKey.EntityKeyValues.Select(kv => kv.Value).ToArray();
return new RepositoryMonitorEvent()
{
dbEntityState = dbEntryState,
objectEntryState = objectEntryState,
dbContext = dbContext,
EventType = eventType,
Entity = dbEntryState.Entity,
@@ -1,6 +1,8 @@
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Data.Entity.Infrastructure;
using System.Data.Objects;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -9,6 +11,13 @@ namespace Disco.Data.Repository.Monitor
{
public class RepositoryMonitorEvent
{
[JsonIgnore]
internal ObjectStateEntry objectEntryState { get; set; }
[JsonIgnore]
internal DbEntityEntry dbEntityState { get; set; }
[JsonIgnore]
internal bool afterCommit { get; set; }
[JsonIgnore]
public DiscoDataContext dbContext { get; set; }
@@ -31,5 +40,17 @@ namespace Disco.Data.Repository.Monitor
public object[] EntityKey { get; set; }
public string[] ModifiedProperties { get; set; }
public T GetPreviousPropertyValue<T>(string PropertyName)
{
if (afterCommit)
throw new InvalidOperationException("Unable to determine property values after repository commit");
else
return (T)dbEntityState.OriginalValues[PropertyName];
}
public T GetCurrentPropertyValue<T>(string PropertyName)
{
return (T)dbEntityState.CurrentValues[PropertyName];
}
}
}