public void Add_new_entity2()
        {
            int  userId = 1;
            bool isSetEntity1ForeignEntityActionCalled = false;
            bool isSetEntity2ForeignEntityActionCalled = false;
            Action <IDbEntity, MockEntity, MockEntity> setEntity1ForeignEntity = (o, e1, ae) => { isSetEntity1ForeignEntityActionCalled = true; };
            Action <IDbEntity, MockEntity, MockEntity> setEntity2ForeignEntity = (o, e2, ae) => { isSetEntity2ForeignEntityActionCalled = true; };
            MockEntity entity = new MockEntity();
            DualDbEntityAssociativeCollectionManager <MockEntity, MockEntity, MockEntity> manager = new DualDbEntityAssociativeCollectionManager <MockEntity, MockEntity, MockEntity>(userId, entity, () => entity.RelationalEntities, setEntity1ForeignEntity, setEntity2ForeignEntity, (o, e1, e2, ae) => { }, null, null, null);

            MockEntity newLocation = new MockEntity()
            {
                id = int.MaxValue
            };
            MockEntity persistedContract = new MockEntity()
            {
                id = int.MinValue
            };

            persistedContract.MarkPersisted();
            MockEntity added = manager.Add(persistedContract, newLocation);

            Assert.IsFalse(isSetEntity1ForeignEntityActionCalled);
            Assert.IsTrue(isSetEntity2ForeignEntityActionCalled);
        }
        public void Add_new_entities()
        {
            int  userId = 1;
            bool isSetForeignKeysActionCalled          = false;
            bool isSetEntity1ForeignEntityActionCalled = false;
            bool isSetEntity2ForeignEntityActionCalled = false;
            Action <IDbEntity, MockEntity, MockEntity, MockEntity> setForeignKeys          = (o, e1, e2, ae) => { isSetForeignKeysActionCalled = true; };
            Action <IDbEntity, MockEntity, MockEntity>             setEntity1ForeignEntity = (o, e1, ae) => { isSetEntity1ForeignEntityActionCalled = true; };
            Action <IDbEntity, MockEntity, MockEntity>             setEntity2ForeignEntity = (o, e2, ae) => { isSetEntity2ForeignEntityActionCalled = true; };
            MockEntity entity = new MockEntity();
            DualDbEntityAssociativeCollectionManager <MockEntity, MockEntity, MockEntity> manager = new DualDbEntityAssociativeCollectionManager <MockEntity, MockEntity, MockEntity>(userId, entity, () => entity.RelationalEntities, setEntity1ForeignEntity, setEntity2ForeignEntity, setForeignKeys, null, null, null);

            MockEntity newLocation = new MockEntity()
            {
                id = int.MaxValue
            };
            MockEntity newContract = new MockEntity()
            {
                id = int.MinValue
            };
            MockEntity added = manager.Add(newContract, newLocation);

            Assert.AreEqual(1, entity.RelationalEntities.Count);
            Assert.AreEqual(added, entity.RelationalEntities.First());
            Assert.IsTrue(isSetEntity1ForeignEntityActionCalled);
            Assert.IsTrue(isSetEntity2ForeignEntityActionCalled);
            Assert.IsTrue(isSetForeignKeysActionCalled);
            Assert.IsFalse(added.IsDeleted);
            Assert.AreEqual(userId, added.CreatedByID);
        }
        public void ReAdd_previously_deleted_entity()
        {
            bool isSetForeignKeysActionCalled          = false;
            bool isSetEntity1ForeignEntityActionCalled = false;
            bool isSetEntity2ForeignEntityActionCalled = false;
            Action <IDbEntity, MockEntity, MockEntity, MockEntity> setForeignKeys          = (o, e1, e2, ae) => { isSetForeignKeysActionCalled = true; };
            Action <IDbEntity, MockEntity, MockEntity>             setEntity1ForeignEntity = (o, e1, ae) => { isSetEntity1ForeignEntityActionCalled = true; };
            Action <IDbEntity, MockEntity, MockEntity>             setEntity2ForeignEntity = (o, e2, ae) => { isSetEntity2ForeignEntityActionCalled = true; };
            MockEntity entity = new MockEntity();
            DualDbEntityAssociativeCollectionManager <MockEntity, MockEntity, MockEntity> manager = new DualDbEntityAssociativeCollectionManager <MockEntity, MockEntity, MockEntity>(1, entity, () => entity.RelationalEntities, setEntity1ForeignEntity, setEntity2ForeignEntity, setForeignKeys, (o, ae) => true, (e1, ae) => true, (e2, ae) => true);

            MockEntity persistedLocation = new MockEntity()
            {
                id = int.MaxValue
            };

            persistedLocation.MarkPersisted();
            MockEntity persistedContract = new MockEntity()
            {
                id = int.MinValue
            };

            persistedContract.MarkPersisted();
            MockEntity persistedServiceContractSiteContact = new MockEntity()
            {
                IsDeleted = true
            };

            persistedServiceContractSiteContact.MarkPersisted();
            entity.RelationalEntities.Add(persistedServiceContractSiteContact);
            MockEntity added = manager.Add(persistedContract, persistedLocation);

            Assert.AreEqual(1, entity.RelationalEntities.Count);
            Assert.AreEqual(added, persistedServiceContractSiteContact);
            Assert.IsFalse(isSetEntity1ForeignEntityActionCalled);
            Assert.IsFalse(isSetEntity2ForeignEntityActionCalled);
            Assert.IsFalse(isSetForeignKeysActionCalled);
            Assert.IsFalse(added.IsDeleted);
        }