Fix: Repository Monitor Detached Head Fix
Fix from detached head merge error.
This commit is contained in:
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
|
|||||||
// You can specify all the values or you can default the Build and Revision Numbers
|
// You can specify all the values or you can default the Build and Revision Numbers
|
||||||
// by using the '*' as shown below:
|
// by using the '*' as shown below:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("1.2.0506.1904")]
|
[assembly: AssemblyVersion("1.2.0506.2022")]
|
||||||
[assembly: AssemblyFileVersion("1.2.0506.1904")]
|
[assembly: AssemblyFileVersion("1.2.0506.2022")]
|
||||||
@@ -73,8 +73,6 @@ namespace Disco.Data.Repository
|
|||||||
{
|
{
|
||||||
int changeCount = 0;
|
int changeCount = 0;
|
||||||
|
|
||||||
this.ChangeTracker.DetectChanges();
|
|
||||||
|
|
||||||
// Notify before changes are committed
|
// Notify before changes are committed
|
||||||
var changes = Monitor.RepositoryMonitor.BeforeSaveChanges(this);
|
var changes = Monitor.RepositoryMonitor.BeforeSaveChanges(this);
|
||||||
|
|
||||||
|
|||||||
@@ -24,11 +24,13 @@ namespace Disco.Data.Repository.Monitor
|
|||||||
{
|
{
|
||||||
var contextStateManager = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectStateManager;
|
var contextStateManager = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectStateManager;
|
||||||
|
|
||||||
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();
|
||||||
|
var changes = dbContext.ChangeTracker.Entries().Where(entry => entry.State == System.Data.EntityState.Added || entry.State == System.Data.EntityState.Deleted || entry.State == System.Data.EntityState.Modified);
|
||||||
|
|
||||||
var events = changes.Select(entryState =>
|
var events = changes.Select(entryState =>
|
||||||
{
|
{
|
||||||
var monitorEvent = EventFromEntryState(entryState);
|
ObjectStateEntry stateEntry = contextStateManager.GetObjectStateEntry(entryState.Entity);
|
||||||
|
var monitorEvent = EventFromEntryState(dbContext, entryState, stateEntry);
|
||||||
|
|
||||||
// Push to Stream
|
// Push to Stream
|
||||||
streamBefore.OnNext(monitorEvent);
|
streamBefore.OnNext(monitorEvent);
|
||||||
@@ -40,12 +42,9 @@ namespace Disco.Data.Repository.Monitor
|
|||||||
}
|
}
|
||||||
internal static void AfterSaveChanges(DiscoDataContext dbContext, IEnumerable<RepositoryMonitorEvent> changes)
|
internal static void AfterSaveChanges(DiscoDataContext dbContext, IEnumerable<RepositoryMonitorEvent> changes)
|
||||||
{
|
{
|
||||||
var contextStateManager = ((IObjectContextAdapter)dbContext).ObjectContext.ObjectStateManager;
|
|
||||||
|
|
||||||
foreach (var change in changes)
|
foreach (var change in changes)
|
||||||
{
|
{
|
||||||
UpdateAfterEventFromEntryState(change, contextStateManager);
|
UpdateAfterEventFromEntryState(change);
|
||||||
|
|
||||||
streamAfter.OnNext(change);
|
streamAfter.OnNext(change);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -72,17 +71,16 @@ namespace Disco.Data.Repository.Monitor
|
|||||||
throw new ArgumentException("The EntryProxyType does not inherit from any Repository Models", "EntityProxyType");
|
throw new ArgumentException("The EntryProxyType does not inherit from any Repository Models", "EntityProxyType");
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void UpdateAfterEventFromEntryState(RepositoryMonitorEvent monitorEvent, ObjectStateManager stateManager)
|
internal static void UpdateAfterEventFromEntryState(RepositoryMonitorEvent monitorEvent)
|
||||||
{
|
{
|
||||||
if (monitorEvent.EventType == RepositoryMonitorEventType.Added)
|
if (monitorEvent.EventType == RepositoryMonitorEventType.Added)
|
||||||
{
|
{
|
||||||
// Update Entity Key for Added Events
|
// Update Entity Key for Added Events
|
||||||
var entryState = stateManager.GetObjectStateEntry(monitorEvent.Entity);
|
monitorEvent.EntityKey = monitorEvent.objectEntryState.EntityKey.EntityKeyValues.Select(kv => kv.Value).ToArray();
|
||||||
monitorEvent.EntityKey = entryState.EntityKey.EntityKeyValues.Select(kv => kv.Value).ToArray();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static RepositoryMonitorEvent EventFromEntryState(ObjectStateEntry entryState)
|
internal static RepositoryMonitorEvent EventFromEntryState(DiscoDataContext dbContext, DbEntityEntry entityEntry, ObjectStateEntry entryState)
|
||||||
{
|
{
|
||||||
RepositoryMonitorEventType eventType;
|
RepositoryMonitorEventType eventType;
|
||||||
string[] modifiedProperties = null;
|
string[] modifiedProperties = null;
|
||||||
@@ -126,7 +124,10 @@ namespace Disco.Data.Repository.Monitor
|
|||||||
Entity = entryState.Entity,
|
Entity = entryState.Entity,
|
||||||
EntityKey = entityKey,
|
EntityKey = entityKey,
|
||||||
EntityType = entityType,
|
EntityType = entityType,
|
||||||
ModifiedProperties = modifiedProperties
|
ModifiedProperties = modifiedProperties,
|
||||||
|
dbContext = dbContext,
|
||||||
|
dbEntityState = entityEntry,
|
||||||
|
objectEntryState = entryState
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user