Merge: Repository Monitor
This commit is contained in:
@@ -32,5 +32,10 @@ using System.Runtime.InteropServices;
|
||||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
<<<<<<< HEAD
|
||||
[assembly: AssemblyVersion("1.2.0430.1219")]
|
||||
[assembly: AssemblyFileVersion("1.2.0430.1219")]
|
||||
=======
|
||||
[assembly: AssemblyVersion("1.2.0411.1608")]
|
||||
[assembly: AssemblyFileVersion("1.2.0411.1608")]
|
||||
>>>>>>> origin/Repository-Monitor
|
||||
|
||||
@@ -76,10 +76,17 @@ namespace Disco.Data.Repository
|
||||
// Notify before changes are committed
|
||||
var changes = Monitor.RepositoryMonitor.BeforeSaveChanges(this);
|
||||
|
||||
<<<<<<< HEAD
|
||||
changeCount = base.SaveChanges();
|
||||
|
||||
if (changes.Length > 0)
|
||||
{
|
||||
=======
|
||||
if (changes.Length > 0)
|
||||
{
|
||||
changeCount = base.SaveChanges();
|
||||
|
||||
>>>>>>> origin/Repository-Monitor
|
||||
// Notify after changes are committed
|
||||
Monitor.RepositoryMonitor.AfterSaveChanges(this, changes);
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ namespace Disco.Data.Repository.Monitor
|
||||
internal static RepositoryMonitorEvent[] BeforeSaveChanges(DiscoDataContext dbContext)
|
||||
{
|
||||
var contextStateManager = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectStateManager;
|
||||
<<<<<<< HEAD
|
||||
//var changes = contextStateManager.GetObjectStateEntries(System.Data.EntityState.Added).Concat(contextStateManager.GetObjectStateEntries(System.Data.EntityState.Deleted)).Concat(contextStateManager.GetObjectStateEntries(System.Data.EntityState.Modified));
|
||||
|
||||
dbContext.ChangeTracker.DetectChanges();
|
||||
@@ -32,6 +33,17 @@ namespace Disco.Data.Repository.Monitor
|
||||
var monitorEvent = EventFromEntryState(dbContext, entryState, contextStateManager.GetObjectStateEntry(entryState.Entity));
|
||||
// Push to Stream
|
||||
streamBefore.OnNext(monitorEvent);
|
||||
=======
|
||||
var changes = contextStateManager.GetObjectStateEntries(System.Data.EntityState.Added).Concat(contextStateManager.GetObjectStateEntries(System.Data.EntityState.Deleted)).Concat(contextStateManager.GetObjectStateEntries(System.Data.EntityState.Modified));
|
||||
|
||||
var events = changes.Select(entryState =>
|
||||
{
|
||||
var monitorEvent = EventFromEntryState(entryState);
|
||||
|
||||
// Push to Stream
|
||||
streamBefore.OnNext(monitorEvent);
|
||||
|
||||
>>>>>>> origin/Repository-Monitor
|
||||
return monitorEvent;
|
||||
}).ToArray();
|
||||
|
||||
@@ -79,18 +91,28 @@ namespace Disco.Data.Repository.Monitor
|
||||
var entryState = stateManager.GetObjectStateEntry(monitorEvent.Entity);
|
||||
monitorEvent.EntityKey = entryState.EntityKey.EntityKeyValues.Select(kv => kv.Value).ToArray();
|
||||
}
|
||||
<<<<<<< HEAD
|
||||
|
||||
monitorEvent.afterCommit = true;
|
||||
}
|
||||
|
||||
internal static RepositoryMonitorEvent EventFromEntryState(DiscoDataContext dbContext, DbEntityEntry dbEntryState, ObjectStateEntry objectEntryState)
|
||||
=======
|
||||
}
|
||||
|
||||
internal static RepositoryMonitorEvent EventFromEntryState(ObjectStateEntry entryState)
|
||||
>>>>>>> origin/Repository-Monitor
|
||||
{
|
||||
RepositoryMonitorEventType eventType;
|
||||
string[] modifiedProperties = null;
|
||||
object[] entityKey = null;
|
||||
Type entityType;
|
||||
|
||||
<<<<<<< HEAD
|
||||
switch (dbEntryState.State)
|
||||
=======
|
||||
switch (entryState.State)
|
||||
>>>>>>> origin/Repository-Monitor
|
||||
{
|
||||
case System.Data.EntityState.Added:
|
||||
eventType = RepositoryMonitorEventType.Added;
|
||||
@@ -108,6 +130,7 @@ namespace Disco.Data.Repository.Monitor
|
||||
eventType = RepositoryMonitorEventType.Unchanged;
|
||||
break;
|
||||
default:
|
||||
<<<<<<< HEAD
|
||||
throw new NotSupportedException(string.Format("Database Entry State not supported: {0}", dbEntryState.State.ToString()));
|
||||
}
|
||||
|
||||
@@ -128,6 +151,25 @@ namespace Disco.Data.Repository.Monitor
|
||||
dbContext = dbContext,
|
||||
EventType = eventType,
|
||||
Entity = dbEntryState.Entity,
|
||||
=======
|
||||
throw new NotSupportedException(string.Format("Database Entry State not supported: {0}", entryState.State.ToString()));
|
||||
}
|
||||
|
||||
entityType = EntityTypeFromProxy(entryState.Entity.GetType());
|
||||
|
||||
// Only pass modified properties on Modified Event (Ignore Added/Deleted)
|
||||
if (eventType == RepositoryMonitorEventType.Modified)
|
||||
modifiedProperties = entryState.GetModifiedProperties().ToArray();
|
||||
|
||||
// Don't pass entity key when entity newly added
|
||||
if (eventType != RepositoryMonitorEventType.Added)
|
||||
entityKey = entryState.EntityKey.EntityKeyValues.Select(kv => kv.Value).ToArray();
|
||||
|
||||
return new RepositoryMonitorEvent()
|
||||
{
|
||||
EventType = eventType,
|
||||
Entity = entryState.Entity,
|
||||
>>>>>>> origin/Repository-Monitor
|
||||
EntityKey = entityKey,
|
||||
EntityType = entityType,
|
||||
ModifiedProperties = modifiedProperties
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
using Newtonsoft.Json;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
<<<<<<< HEAD
|
||||
using System.Data.Entity.Infrastructure;
|
||||
using System.Data.Objects;
|
||||
=======
|
||||
>>>>>>> origin/Repository-Monitor
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
@@ -11,6 +14,7 @@ namespace Disco.Data.Repository.Monitor
|
||||
{
|
||||
public class RepositoryMonitorEvent
|
||||
{
|
||||
<<<<<<< HEAD
|
||||
[JsonIgnore]
|
||||
internal ObjectStateEntry objectEntryState { get; set; }
|
||||
[JsonIgnore]
|
||||
@@ -21,6 +25,8 @@ namespace Disco.Data.Repository.Monitor
|
||||
[JsonIgnore]
|
||||
public DiscoDataContext dbContext { get; set; }
|
||||
|
||||
=======
|
||||
>>>>>>> origin/Repository-Monitor
|
||||
public RepositoryMonitorEventType EventType { get; set; }
|
||||
|
||||
[JsonIgnore]
|
||||
@@ -40,6 +46,7 @@ namespace Disco.Data.Repository.Monitor
|
||||
public object[] EntityKey { get; set; }
|
||||
|
||||
public string[] ModifiedProperties { get; set; }
|
||||
<<<<<<< HEAD
|
||||
|
||||
public T GetPreviousPropertyValue<T>(string PropertyName)
|
||||
{
|
||||
@@ -52,5 +59,7 @@ namespace Disco.Data.Repository.Monitor
|
||||
{
|
||||
return (T)dbEntityState.CurrentValues[PropertyName];
|
||||
}
|
||||
=======
|
||||
>>>>>>> origin/Repository-Monitor
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user