public void Typed_Entity_Saves_With_Null_Attribute_Values()
        {
            var entity = GetMockedEntity();

            foreach (var a in entity.Attributes)
            {
                a.Values.Clear();
                a.DynamicValue = null;
            }

            using (var writer = ProviderSetup.UnitFactory.Create())
            {
                writer.EntityRepository.AddOrUpdate(entity);
                writer.Complete();
            }
            PostWriteCallback.Invoke();

            using (var reader = ReadonlyProviderSetup.ReadonlyUnitFactory.CreateReadonly())
            {
                var rev = reader.EntityRepository.Get <TypedEntity>(entity.Id);
                Assert.AreEqual(entity.Attributes.Count, rev.Attributes.Count);
                foreach (var a in rev.Attributes)
                {
                    Assert.AreEqual(null, a.DynamicValue);
                }
            }
        }
        public void Entity_Exists()
        {
            var entity = GetMockedEntity();

            using (var uow = ProviderSetup.UnitFactory.Create())
            {
                uow.EntityRepository.AddOrUpdate(entity);
                uow.Complete();
            }
            PostWriteCallback.Invoke();

            using (var reader = ReadonlyProviderSetup.ReadonlyUnitFactory.CreateReadonly())
            {
                Assert.IsTrue(reader.EntityRepository.Exists <TypedEntity>(entity.Id));
            }
        }
        public void Add_Or_Update_Entity()
        {
            var entity = GetMockedEntity();

            using (var uow = ProviderSetup.UnitFactory.Create())
            {
                uow.EntityRepository.AddOrUpdate(entity);
                uow.Complete();
            }
            PostWriteCallback.Invoke();

            using (var reader = ReadonlyProviderSetup.ReadonlyUnitFactory.CreateReadonly())
            {
            }

            Assert.IsFalse(entity.Id.IsNullValueOrEmpty());
        }
        public void Get_All_Entities()
        {
            using (var uow = ProviderSetup.UnitFactory.Create())
            {
                for (var i = 0; i < 30; i++)
                {
                    uow.EntityRepository.AddOrUpdate(GetMockedEntity());
                }
                uow.Complete();
            }
            PostWriteCallback.Invoke();

            using (var reader = ReadonlyProviderSetup.ReadonlyUnitFactory.CreateReadonly())
            {
                Assert.AreEqual(30, reader.EntityRepository.GetAll <TypedEntity>().Count());
            }
        }
        public void NestedUnitOfWork_NoProblemo()
        {
            TypedEntity entity  = GetMockedEntity();
            TypedEntity entity2 = GetMockedEntity();

            AssignFakeIdsIfPassthrough(ProviderSetup.ProviderMetadata, entity);
            AssignFakeIdsIfPassthrough(ProviderSetup.ProviderMetadata, entity2);

            using (var outerUnit = ProviderSetup.UnitFactory.Create())
            {
                outerUnit.EntityRepository.AddOrUpdate(entity);
                var outerTransaction = outerUnit.EntityRepository.Transaction.GetTransactionId();

                // Do some nested writing
                using (var innerUnit = ProviderSetup.UnitFactory.Create())
                {
                    Assert.That(innerUnit.EntityRepository.Transaction.GetTransactionId(), Is.Not.EqualTo(outerTransaction));
                    innerUnit.EntityRepository.AddOrUpdate(entity2);
                    innerUnit.Complete();
                }

                // Do some nested reading
                using (var innerUnit = ReadonlyProviderSetup.ReadonlyUnitFactory.CreateReadonly())
                {
                    innerUnit.EntityRepository.Exists <TypedEntity>(new HiveId(Guid.NewGuid()));
                }

                // Do some nested reading with the writer
                using (var innerUnit = ProviderSetup.UnitFactory.Create())
                {
                    innerUnit.EntityRepository.Exists <TypedEntity>(new HiveId(Guid.NewGuid()));
                }

                // Do some nested writing
                using (var innerUnit = ProviderSetup.UnitFactory.Create())
                {
                    innerUnit.EntityRepository.AddOrUpdate(entity2);
                    innerUnit.Complete();
                }

                outerUnit.Complete();
            }

            HiveId id1 = entity.Id;
            HiveId id2 = entity2.Id;

            using (var outerUnit = ProviderSetup.UnitFactory.Create())
            {
                // Do some nested reading
                using (var innerUnit = ReadonlyProviderSetup.ReadonlyUnitFactory.CreateReadonly())
                {
                    innerUnit.EntityRepository.Exists <TypedEntity>(new HiveId(Guid.NewGuid()));
                    //innerUnit.Complete();
                }

                outerUnit.EntityRepository.AddOrUpdate(entity);

                outerUnit.Complete();
            }

            PostWriteCallback.Invoke();

            using (var unit = ReadonlyProviderSetup.ReadonlyUnitFactory.CreateReadonly())
            {
                var compare  = unit.EntityRepository.Get <TypedEntity>(id1);
                var compare2 = unit.EntityRepository.Get <TypedEntity>(id2);

                Assert.IsNotNull(compare);
                Assert.IsNotNull(compare2);
            }
        }