public void ChangeSetTest() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); LoadOperation <B> loadOp = ctx.Load(ctx.GetBSetQuery()); EnqueueConditional(() => loadOp.IsComplete); EnqueueCallback( () => { B existingB = ctx.Bs.Single(); a.BSet.Add(existingB); existingB.name = "Hello"; B newB = new B(); a.BSet.Add(newB); ctx.As.Add(a); var changeSet = a.EntityGraph(EntityGraphs.CircularGraphFull).GetChanges(); Assert.IsTrue(changeSet.ModifiedEntities.Contains(existingB), "ChangeSet.ModifiedEntities should contain b"); Assert.AreEqual(5, changeSet.AddedEntities.Count(), "Incorrect number of added entities"); Assert.IsTrue(changeSet.AddedEntities.Contains(b), "ChangeSet.AddedEntities shoudl contain b"); Assert.IsTrue(changeSet.AddedEntities.Contains(newB), "ChangeSet.AddedEntities shoudl contain newB"); Assert.IsTrue(changeSet.RemovedEntities.Count() == 0, "ChangeSet.RemovedEntities should be 0"); } ); EnqueueTestComplete(); }
public void IEditableObjectAssociationTest() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); LoadOperation <B> loadOp = ctx.Load(ctx.GetBSetQuery()); EnqueueConditional(() => loadOp.IsComplete); EnqueueCallback( () => { ctx.As.Add(a); B existingB = loadOp.Entities.SingleOrDefault(); B newB = new B { Id = -1 }; var gr = a.EntityGraph(EntityGraphs.CircularGraphFull); a.B = existingB; gr.BeginEdit(); a.B = newB; gr.CancelEdit(); Assert.IsTrue(a.BId == existingB.Id); // Succeeds Assert.IsTrue(a.B == existingB); // Succeeds a.B = newB; gr.BeginEdit(); a.B = existingB; gr.CancelEdit(); // Here we have a bug in IEditableObject (http://forums.silverlight.net/forums/p/204333/478308.aspx#478308) Assert.IsTrue(a.BId == newB.Id); // Succeeds Assert.IsTrue(a.B != newB); // Potential DomainServices.Client bug, (should be equal to newB) Assert.IsTrue(a.B == null); // Potential DomainServices.Client bug, (should be equal to newB) }); EnqueueTestComplete(); }
public void IEditableObjectAssociationSetTest() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); LoadOperation <B> loadOp = ctx.Load(ctx.GetBSetQuery()); EnqueueConditional(() => loadOp.IsComplete); EnqueueCallback( () => { B existingB = loadOp.Entities.SingleOrDefault(); B b = new B(); var gr = a.EntityGraph(EntityGraphs.CircularGraphFull); gr.BeginEdit(); // Adding a new entity (b) will fail, because this will not correctly raise the proper // collection changed events when CancelEdit is called. (http://forums.silverlight.net/forums/p/204333/478862.aspx#478862) // // Adding to a.BSet directly does change existingB.AId prior to the invocation // of existingB.BeginEdit(). Consequently, existingB.CancelEdit() will not restore existingB.AId. // Calling Add on the entity graph calls existingB.BEginEdit() prior to adding // existingB to a.BSet. ((IEditableObject)existingB).BeginEdit(); a.BSet.Add(existingB); Assert.IsTrue(a.BSet.Count() == 1, "a.BSet has incorrect number of elements"); gr.CancelEdit(); Assert.IsTrue(a.BSet.Count() == 0, "a.BSet has incorrect number of elements"); }); EnqueueTestComplete(); }
public void DetachWithNonIncludedExistingEntityTest() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); LoadOperation <B> loadOp = ctx.Load(ctx.GetBSetQuery()); EnqueueConditional(() => loadOp.IsComplete); EnqueueCallback( () => { EntityGraph gr = a.EntityGraph(EntityGraphs.CircularGraphFull); B existingB = ctx.Bs.Single(); ctx.As.Add(a); a.BNotInGraph = existingB; Assert.IsTrue(a.EntityState == EntityState.New); Assert.IsTrue(a.BNotInGraph.EntityState == EntityState.Unmodified); Assert.IsTrue(a.BNotInGraphId == existingB.Id); gr.DetachEntityGraph(ctx.As); Assert.IsTrue(a.EntityState == EntityState.Detached); Assert.IsTrue(a.BNotInGraph.EntityState == EntityState.Unmodified); Assert.IsTrue(a.BNotInGraphId == existingB.Id); }); EnqueueTestComplete(); }
public void EntityGraphInitializesHasChangesTest() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); ctx.As.Add(a); var gr = a.EntityGraph(EntityGraphs.CircularGraphFull); Assert.IsTrue(gr.HasChanges); }
public void CloneIntoPreservesEntityStateNewTest() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); EntityGraphTestsDomainContext ctxNew = new EntityGraphTestsDomainContext(); ctx.As.Add(a); var gr = new EntityGraph(a, new FullEntityGraphShape()); var clone = gr.Clone(ctxNew); Assert.IsTrue(a.EntityState == EntityState.New); Assert.IsTrue(clone.Source.EntityState == EntityState.New); }
public void DetachTest() { EntityGraph gr = a.EntityGraph(EntityGraphs.CircularGraphFull); EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); a.BSet.Add(new B()); ctx.As.Add(a); gr.DetachEntityGraph(ctx.As); Assert.IsTrue(ctx.EntityContainer.GetChanges().AddedEntities.Count() == 0); }
public void SynchronizePreservesEntityStateUnmodifiedTest() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); EntityGraphTestsDomainContext ctxNew = new EntityGraphTestsDomainContext(); ctx.As.Attach(a); var gr = new EntityGraph(a, new FullEntityGraphShape()); var clone = gr.Clone(); ctxNew.As.Attach(clone.Source); clone.Synchronize(gr); Assert.IsTrue(a.EntityState == EntityState.Unmodified); Assert.IsTrue(clone.Source.EntityState == EntityState.Unmodified); }
public void CloneIntoPreservesEntityStateModifiedTest() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); EntityGraphTestsDomainContext ctxNew = new EntityGraphTestsDomainContext(); ctx.As.Attach(a); a.name = "Hello World"; var gr = new EntityGraph(a, new FullEntityGraphShape()); var clone = gr.Clone(ctxNew); Assert.IsTrue(a.EntityState == EntityState.Modified); Assert.IsTrue(clone.Source.EntityState == EntityState.Modified); }
public void IsChangedAndAcceptChangesTest() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); ctx.As.Attach(a); var graph = new EntityGraph(a, new FullEntityGraphShape()); Assert.IsFalse(graph.IsChanged); a.B.name = "Changed"; Assert.IsTrue(graph.IsChanged); graph.AcceptChanges(); Assert.IsFalse(graph.IsChanged); }
public void PartialSaveTest() { EntityGraphTestsDomainContext context = new EntityGraphTestsDomainContext(); var a = new A { Id = 1 }; var b = new B { Id = 1 }; context.As.Attach(a); context.Bs.Attach(b); context.Bs.Attach(new B { Id = 2, AId = 1 }); context.Bs.Attach(new B { Id = 3, AId = 1 }); a.name = "Modified Task 1"; EntityGraphTestsDomainContext tempContext = new EntityGraphTestsDomainContext(); var shape = new FullEntityGraphShape(); var graph = new EntityGraph(a, shape); Assert.IsTrue(context.HasChanges); Assert.IsTrue(graph.HasChanges); Assert.IsTrue(graph.IsChanged); var clone = graph.Clone(tempContext); Assert.IsTrue(tempContext.HasChanges); Assert.IsTrue(clone.HasChanges); Assert.IsTrue(clone.IsChanged); clone.AcceptChanges(); graph.Synchronize(clone); Assert.IsFalse(context.HasChanges); Assert.IsFalse(graph.HasChanges); Assert.IsFalse(graph.IsChanged); Assert.IsFalse(tempContext.HasChanges); Assert.IsFalse(clone.HasChanges); Assert.IsFalse(clone.IsChanged); }
public void SynchronizeResetsEntityModifiedState() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); EntityGraphTestsDomainContext ctxNew = new EntityGraphTestsDomainContext(); ctx.As.Attach(a); a.name = "Some name"; var gr = new EntityGraph(a, new FullEntityGraphShape()); var clone = gr.Clone(); ctxNew.As.Attach(clone.Source); Assert.IsTrue(a.EntityState == EntityState.Modified); gr.Synchronize(clone); Assert.IsTrue(a.EntityState == EntityState.Unmodified); }
public void CopyIsDetachedFromContextTest() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); LoadOperation <B> loadOp = ctx.Load(ctx.GetBSetQuery()); EnqueueConditional(() => loadOp.IsComplete); EnqueueCallback( () => { B b = loadOp.Entities.SingleOrDefault(); Assert.IsFalse(ctx.HasChanges); var copy = b.Copy(new RiaServicesContrib.EntityGraphShape().Edge <B, A>(B => B.A).Edge <B, C>(B => B.C)); Assert.IsFalse(ctx.HasChanges); }); EnqueueTestComplete(); }
public void CloneIntoPreservesPrimaryKeyTest() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); LoadOperation <B> loadOp = ctx.Load(ctx.GetBSetQuery()); EnqueueConditional(() => loadOp.IsComplete); EnqueueCallback( () => { EntityGraphTestsDomainContext ctxNew = new EntityGraphTestsDomainContext(); B existingB = loadOp.Entities.SingleOrDefault(); var gr = existingB.EntityGraph(new FullEntityGraphShape()); var clone = gr.Clone(ctxNew); Assert.IsTrue(((B)clone.Source).Id == existingB.Id); }); EnqueueTestComplete(); }
public void SynchronizeWithMergeIntoCurrentTest() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); EntityGraphTestsDomainContext ctxNew = new EntityGraphTestsDomainContext(); ctx.As.Attach(a); var gr = new EntityGraph(a, new FullEntityGraphShape()); var clone = gr.Clone(); ctxNew.As.Attach(clone.Source); ((A)clone.Source).name = "Some name"; a.lastName = "Some last name"; Assert.IsTrue(a.EntityState == EntityState.Modified); gr.Synchronize(clone, LoadBehavior.MergeIntoCurrent); Assert.IsTrue(a.name == "Some name"); Assert.IsTrue(a.lastName == "Some last name"); }
public void CloneIntoPreservesAllEntityStates() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); EntityGraphTestsDomainContext ctxNew = new EntityGraphTestsDomainContext(); ctx.As.Add(a); var gr = new EntityGraph(a, new FullEntityGraphShape()); var clone = gr.Clone(ctxNew); var result = from source in gr from cloned in clone where source.GetType() == cloned.GetType() where source.EntityState == cloned.EntityState select cloned; Assert.IsTrue(result.Count() == gr.Count()); }
public void INotifyCollectionChangedUpdatesHasChangesTest() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); LoadOperation <B> loadOp = ctx.Load(ctx.GetBSetQuery()); EnqueueConditional(() => loadOp.IsComplete); EnqueueCallback( () => { var gr = a.EntityGraph(EntityGraphs.CircularGraphFull); Assert.IsFalse(gr.HasChanges); B existingB = loadOp.Entities.SingleOrDefault(); a.BSet.Add(existingB); Assert.IsTrue(gr.HasChanges); }); EnqueueTestComplete(); }
public void DetachWithNonIncludedNewEntityTest() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); EntityGraph gr = a.EntityGraph(EntityGraphs.CircularGraphFull); ctx.As.Add(a); var newB = new B(); a.BNotInGraph = newB; Assert.IsTrue(a.EntityState == EntityState.New); Assert.IsTrue(a.BNotInGraph.EntityState == EntityState.New); Assert.IsTrue(a.BNotInGraphId == newB.Id); gr.DetachEntityGraph(ctx.As); Assert.IsTrue(a.EntityState == EntityState.Detached); Assert.IsTrue(a.BNotInGraph.EntityState == EntityState.New); Assert.IsTrue(a.BNotInGraphId == newB.Id); }
public void INotifyPropertyChangeUpdatesHasChangesTest() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); LoadOperation <B> loadOp = ctx.Load(ctx.GetBSetQuery()); EnqueueConditional(() => loadOp.IsComplete); EnqueueCallback( () => { B existingB = loadOp.Entities.SingleOrDefault(); var gr = existingB.EntityGraph(EntityGraphs.CircularGraphFull); Assert.IsFalse(gr.HasChanges); ((IEditableObject)existingB).BeginEdit(); existingB.name = "Some Name"; Assert.IsTrue(gr.HasChanges); ((IEditableObject)existingB).CancelEdit(); Assert.IsFalse(gr.HasChanges); }); EnqueueTestComplete(); }
public void RemoveTest() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); LoadOperation <B> loadOp = ctx.Load(ctx.GetBSetQuery()); EnqueueConditional(() => loadOp.IsComplete); EnqueueCallback( () => { EntityGraph gr = a.EntityGraph(EntityGraphs.CircularGraphFull); B existingB = ctx.Bs.Single(); ctx.As.Add(a); a.BSet.Add(new B()); a.BSet.Add(existingB); gr.RemoveEntityGraph(ctx.As); var changeSet = ctx.EntityContainer.GetChanges(); Assert.IsTrue(changeSet.AddedEntities.Count() == 0, "Added entities should be zero"); Assert.IsTrue(changeSet.RemovedEntities.Count() == 2, "Removed entities should be 2"); }); EnqueueTestComplete(); }
public void EntityCollectionWithExistingEntityTest() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); LoadOperation <B> loadOp = ctx.Load(ctx.GetBSetQuery()); EnqueueConditional(() => loadOp.IsComplete); EnqueueCallback( () => { A a = new A(); B b = loadOp.Entities.SingleOrDefault(); b.ASet.Add(a); Assert.IsTrue(a.B == b); Assert.IsTrue(b.ASet.Count() == 1); Assert.IsTrue(b.ASet.SingleOrDefault() == a); a.BId = null; Assert.IsTrue(a.B == null); Assert.IsTrue(b.ASet.Count() == 0); Assert.IsTrue(b.ASet.SingleOrDefault() == null); }); EnqueueTestComplete(); }
public void IEditableObjectAssociationSetAndRemoveTest() { EntityGraphTestsDomainContext ctx = new EntityGraphTestsDomainContext(); LoadOperation <B> loadOp = ctx.Load(ctx.GetBSetQuery()); EnqueueConditional(() => loadOp.IsComplete); EnqueueCallback( () => { B existingB = loadOp.Entities.SingleOrDefault(); B b = new B(); var gr = a.EntityGraph(EntityGraphs.CircularGraphFull); gr.BeginEdit(); ((IEditableObject)b).BeginEdit(); a.BSet.Add(b); a.BSet.Remove(b); Assert.IsTrue(a.BSet.Count() == 0, "a.BSet has incorrect number of elements"); gr.CancelEdit(); Assert.IsTrue(a.BSet.Count() == 0, "a.BSet has incorrect number of elements"); }); EnqueueTestComplete(); }
public void CloneIntoDoesNotYieldKeyAlreadyExistsException() { EntityGraphTestsDomainContext context = new EntityGraphTestsDomainContext(); var a = new A { Id = 1 }; context.As.Attach(a); context.Bs.Attach(new B { Id = 1, AId = 1 }); context.Bs.Attach(new B { Id = 2, AId = 1 }); a.name = "Modified Task 1"; EntityGraphTestsDomainContext tempContext = new EntityGraphTestsDomainContext(); var shape = new FullEntityGraphShape(); // Clone should not raise an exception when instances of B are attached to tmpContext a.Clone(tempContext, shape); }