public void EntityProcessor_Property_Get_Method_Should_Set_and_Get_nullable_value_types()
        {
            DateTime dateValue  = DateTime.Now;
            DateTime verifyDate = DateTime.Now.AddDays(2);
            long     val        = 8;
            var      accessor   = new EntityAccessor(typeof(FakeEntityAccessor3));

            accessor.Load(new DynamicEntityMap(typeof(FakeEntityAccessor3)));
            FakeEntityAccessor3 fake = new FakeEntityAccessor3()
            {
                Prop = "Hello", Prop4 = 5
            };


            var nullableProp = accessor.Properties["Prop4"];

            Assert.AreEqual(5, nullableProp.GetMethod(fake));
            nullableProp.SetMethod(fake, val);
            Assert.AreEqual(val, fake.Prop4);

            //now let's handle null values
            nullableProp.SetMethod(fake, null);
            Assert.IsNull(fake.Prop4);
            Assert.IsNull(nullableProp.GetMethod(fake));
        }
        public void Can_create_entity_wrapper()
        {
            var service = Substitute.For <IOrganizationService>();
            var context = Substitute.For <ITransactionContextBase>();

            context.Service.Returns(service);

            var entity = new Entity("xts_nongenericentity")
            {
                Id = Guid.NewGuid()
            };
            var xtsEntity = new xts_entity {
                Id = Guid.NewGuid()
            };

            InstanceEntityWrapper <Entity, TestWrapper> .Create(entity, context);

            InstanceEntityWrapper <xts_entity, TestGenericWrapper <xts_entity> > .Create(xtsEntity, context);

            InstanceEntityWrapper <xts_entity, EntityWrapper <xts_entity> > .Create(xtsEntity, context);

            InstanceEntityWrapper <Entity, TestWrapper> .Create(xtsEntity, context);

            var accessor = new EntityAccessor <Entity>(entity);

            InstanceEntityWrapper <Entity, TestWrapper> .Create(accessor, context);

            var xtsAccessor = new EntityAccessor <xts_entity>(xtsEntity);

            InstanceEntityWrapper <xts_entity, TestGenericWrapper <xts_entity> > .Create(xtsAccessor, context);

            InstanceEntityWrapper <xts_entity, EntityWrapper <xts_entity> > .Create(xtsAccessor, context);

            InstanceEntityWrapper <Entity, TestWrapper> .Create(xtsAccessor, context);
        }
Exemple #3
0
        QueryParam[] BuildParameterArray(StatementMap statement, QueryParam[] paramArray, IDictionary <string, object> inputObjects)
        {
            var dbParams = paramArray.ToDictionary(p => p.Name);

            if ((inputObjects != null) && (inputObjects.Count > 0))
            {
                foreach (var inParam in statement.ParamPropertyMap.Values)
                {
                    object paramObj;
                    if (inputObjects.TryGetValue(inParam.Property.VarName, out paramObj))
                    {
                        EntityAccessor getSetInfo = store.GetEntityAccessor(inParam.ClrType, inParam.Map);

                        PropertyAccessor pInfo;
                        if (getSetInfo.Properties.TryGetValue(inParam.Property.PropName, out pInfo))
                        {
                            QueryParam dbParam = new QueryParam(inParam.QueryParamName, null);
                            dbParam.Value = pInfo.GetMethod(paramObj);
                            if (!dbParams.ContainsKey(inParam.QueryParamName))
                            {
                                dbParams.Add(inParam.QueryParamName, dbParam);
                            }
                        }
                    }
                }
            }

            return(dbParams.Values.ToArray());
        }
        internal void SerializeSingle(object instanceEntity, Type type, ComplexType complextType,
                                      EntityAccessor entityAccessor, Dictionary <string, int> columns, DbDataReader dbReader)
        {
            var trackable = instanceEntity as ITrackable;

            if (trackable != null)
            {
                //logger.Log(LogLevel.Debug, string.Format("Stopping and clearing Entity {0}  change tracker.", type));
                trackable.ChangeTracker.StopAndClear();
                //logger.Log(LogLevel.Debug, "Initializing trackable entity change tracker.");
                trackable.ChangeTracker.Init();
            }

            foreach (var keyVal in entityAccessor.Properties)
            {
                /* NOTE: Intentionally going only 1 level up the inheritance. something like :
                 *  SuperSuperClass
                 *      SuperClass
                 *          Class
                 *
                 *  SuperSuperClass if is a mapped entity its properties will be ignored. May be implement this later on.
                 *  For now too ugly don't want to touch.
                 */
                var prop = complextType.GetProperty(keyVal.Key);
                if (prop != null)
                {
                    int ordinal;
                    if (columns.TryGetValue(prop.ColumnName, out ordinal))
                    {
                        var val       = dbReader[ordinal];
                        var fieldType = dbReader.GetFieldType(ordinal);
                        if ((fieldType == keyVal.Value.PropertyType) && (val != DBNull.Value) && (val != null))
                        {
                            keyVal.Value.SetMethod(instanceEntity, val);
                            LoadInitialValueForInTracker(trackable, prop.PropertyName, val);
                        }
                        else if (keyVal.Value.PropertyType.IsEnum)
                        {
                            var enumVal = TypeConverterStore.ConvertToEnum(keyVal.Value.PropertyType, val);
                            keyVal.Value.SetMethod(instanceEntity, enumVal);
                            LoadInitialValueForInTracker(trackable, prop.PropertyName, enumVal);
                        }
                        else
                        {
                            var converter      = TypeConverterStore.GetConverterFactoryMethod(keyVal.Value.PropertyType);
                            var convertedValue = converter.Invoke(val);
                            keyVal.Value.SetMethod(instanceEntity, convertedValue);
                            LoadInitialValueForInTracker(trackable, prop.PropertyName, convertedValue);
                        }
                    }
                }
            }

            if (trackable != null)
            {
                trackable.ChangeTracker.Start();
                trackable.Version = trackable.ChangeTracker.Version;
                //logger.Log(LogLevel.Debug, string.Format("Restarted tracker -- version {0}.", trackable.Version));
            }
        }
        public void EntityProcessor_Property_Get_Method_Should_Set_and_Get_value_types()
        {
            DateTime dateValue  = DateTime.Now;
            DateTime verifyDate = DateTime.Now.AddDays(2);

            var accessor = new EntityAccessor(typeof(FakeEntityAccessor3));

            accessor.Load(new DynamicEntityMap(typeof(FakeEntityAccessor3)));
            FakeEntityAccessor3 fake = new FakeEntityAccessor3()
            {
                Prop = "Hello", Prop2 = dateValue, Prop3 = 5
            };

            var dateProp = accessor.Properties["Prop2"];

            Assert.AreEqual(dateValue, dateProp.GetMethod(fake));
            dateProp.SetMethod(fake, verifyDate);
            Assert.AreEqual(verifyDate, fake.Prop2);

            var intProp = accessor.Properties["Prop3"];

            Assert.AreEqual(5, intProp.GetMethod(fake));
            intProp.SetMethod(fake, 8);
            Assert.AreEqual(8, fake.Prop3);
        }
        //This method below in case we want to implement eager loading.
        private bool CheckAndRemoveDupes(EntityMap entityMap, EntityAccessor accessor, object entity,
                                         Dictionary <object, object> resultStore)
        {
            if (entityMap.PrimaryKey != null)
            {
                var k = entityMap.PrimaryKey.Keys[0].Key;
                PropertyAccessor propAccessor = accessor.GetPropertyAccessor(k.PropertyName);
                var    keyVal = propAccessor.GetMethod(entity);
                object storedEntity;
                if (resultStore.TryGetValue(keyVal, out storedEntity))
                {
                    //we have duplicate due to eager-loaded relations
                    foreach (var rel in entityMap.Relations)
                    {
                        if (!rel.LazyLoad)
                        {
                            var rPropAccessor = accessor.GetPropertyAccessor(rel.PropertyName);
                            var collection    = rPropAccessor.GetMethod(storedEntity);
                            var newCollection = rPropAccessor.GetMethod(entity);

                            rPropAccessor.PropertyType.GetMethod("AddRange").Invoke(collection, new[] { newCollection });
                        }
                    }
                }
                else
                {
                    resultStore.Add(keyVal, entity);
                }
                return(true);
            }
            return(false);
        }
Exemple #7
0
        /// <summary>
        /// 创建或获取一个非泛型类型的 <see cref="EntityAccessor"/> 实体数据模型访问器对象,并指定其可操作的 实体数据模型类型。<br />
        /// 该 实体数据模型访问器对象 在未更改 EntityType 属性的情况下仅可用于操作 指定的实体数据模型类型。<br />
        /// 因实体数据模型访问器对象由 实体数据上下文 <see cref="DbContext"/> 创建,其 AutoDisposeContext 属性值为 false,表示不销毁其 DbContext 属性。
        /// </summary>
        /// <param name="_this">实体数据上下文对象。</param>
        /// <param name="entityType">指定的实体数据模型类型。</param>
        /// <returns>返回一个非泛型类型的 <see cref="EntityAccessor"/> 实体数据模型访问器对象。</returns>
        public static EntityAccessor Accessor(this System.Data.Entity.DbContext _this, Type entityType)
        {
            EntityAccessor accessor = new EntityAccessor(_this, entityType);

            accessor.AutoDisposeContext = false;
            return(accessor);
        }
Exemple #8
0
        public void Can_set_formatted_value_generic()
        {
            var entity   = new xts_entity();
            var accessor = new EntityAccessor <xts_entity>(entity);

            accessor.SetFormattedValue(e => e.xts_optionsetvalue, "formatted-value-4567");
            Assert.Equal("formatted-value-4567", entity.FormattedValues["xts_optionsetvalue"]);
        }
Exemple #9
0
        public void Should_Set_Entity_Node_Id()
        {
            var entity = new Entity();

            EntityAccessor.SetNodeId(entity, 1);

            Assert.AreEqual(1, entity.Id);
        }
Exemple #10
0
        public void Should_Not_Set_Properties_If_Entity_Does_Not_Use_NodeIdAttribute()
        {
            var entity = new NonEntity();

            EntityAccessor.SetNodeId(entity, 1);

            Assert.AreEqual(0, entity.Id);
        }
Exemple #11
0
        public void Can_set_formatted_value()
        {
            var entity   = new xts_entity();
            var accessor = new EntityAccessor <xts_entity>(entity);

            accessor.SetFormattedValue("xts_attribute", "formatted-value-1234");
            Assert.Equal("formatted-value-1234", entity.FormattedValues["xts_attribute"]);
        }
Exemple #12
0
        /// <summary>
        /// 创建或获取一个泛型类型的 <see cref="EntityAccessor"/> 实体数据模型访问器对象,并指定其可操作的 实体数据模型类型。<br />
        /// 该 实体数据模型访问器对象 仅可用于操作 指定的实体数据模型类型。<br />
        /// 因实体数据模型访问器对象由 实体数据上下文 <see cref="DbContext"/> 创建,其 AutoDisposeContext 属性值为 false,表示不销毁其 DbContext 属性。
        /// </summary>
        /// <typeparam name="TEntity">指定的实体数据模型类型。</typeparam>
        /// <param name="_this">实体数据上下文对象。</param>
        /// <returns>返回一个泛型类型的 <see cref="EntityAccessor&lt;TEntity&gt;"/> 实体数据模型访问器对象。</returns>
        public static EntityAccessor <TEntity> Accessor <TEntity>(this System.Data.Entity.DbContext _this)
            where TEntity : class, new()
        {
            EntityAccessor <TEntity> accessor = new EntityAccessor <TEntity>(_this);

            accessor.AutoDisposeContext = false;
            return(accessor);
        }
Exemple #13
0
        private void SetCleanContextState()
        {
            _context = new TestDbContext();
            Accessor = new EntityAccessor(_context, TestUserInfo.Instance);
            SetInitialData();

            _context.SaveChanges();
        }
Exemple #14
0
        public void Should_Return_Null_If_Entity_Does_Not_Use_NodeIdAttribute()
        {
            var entity = new NonEntity {
                Id = 1
            };
            var id = EntityAccessor.GetNodeId(entity);

            Assert.IsNull(id);
        }
Exemple #15
0
        public void Should_Return_Entity_Node_Id_For_Nullable_Id()
        {
            var entity = new EntityWithNullableId {
                Id = 1
            };
            var id = EntityAccessor.GetNodeId(entity);

            Assert.AreEqual(1, id);
        }
Exemple #16
0
        public void Can_set_option_set_value_using_int()
        {
            var entity = new xts_entity {
                Id = Guid.NewGuid()
            };
            var accessor = new EntityAccessor <xts_entity>(entity);

            accessor.Set(e => e.xts_optionsetvalue, 12);
            Assert.Equal(12, accessor.Get(e => e.xts_optionsetvalue).Value);
        }
Exemple #17
0
        public void Can_set_money_using_decimal()
        {
            var entity = new xts_entity {
                Id = Guid.NewGuid()
            };
            var accessor = new EntityAccessor <xts_entity>(entity);

            accessor.Set(e => e.xts_money, 1234);
            Assert.Equal(1234m, accessor.Get(e => e.xts_money).Value);
        }
Exemple #18
0
        public void Can_get_formatted_value_generic()
        {
            var entity = new xts_entity();

            entity.FormattedValues["xts_optionsetvalue"] = "formatted-value-4567";
            var accessor = new EntityAccessor <xts_entity>(entity);

            Assert.Equal("formatted-value-4567", accessor.GetFormattedValue(e => e.xts_optionsetvalue));
            Assert.Null(accessor.GetFormattedValue(e => e.xts_decimal));
        }
Exemple #19
0
        public void Can_get_formatted_value()
        {
            var entity = new xts_entity();

            entity.FormattedValues["xts_attribute"] = "formatted-value-1234";
            var accessor = new EntityAccessor <xts_entity>(entity);

            Assert.Equal("formatted-value-1234", accessor.GetFormattedValue("xts_attribute"));
            Assert.Null(entity.GetFormattedValue("xts_notexist"));
        }
Exemple #20
0
        public void Can_set_through_value_provider()
        {
            var valueProvider = Substitute.For <IValueProvider>();

            valueProvider.GetValue().Returns("1234");

            var entity   = new Entity();
            var accessor = new EntityAccessor <Entity>(entity);

            accessor.Set("xts_attribute", valueProvider);

            Assert.Equal("1234", entity.Get <string>("xts_attribute"));
        }
Exemple #21
0
        public void Can_set_attribute_value()
        {
            var entity = new xts_entity
            {
                Id = Guid.NewGuid()
            };
            var accessor  = new EntityAccessor <xts_entity>(entity);
            var reference = new EntityReference("reference", Guid.NewGuid());

            accessor.Set("xts_attribute", reference);

            Assert.Equal(reference, entity["xts_attribute"]);
        }
Exemple #22
0
        [Fact] // Assume ActivityParty
        public void Can_set_entity_collection_using_single_entity_reference()
        {
            var entityReference = new EntityReference("equipment", Guid.NewGuid());
            var entity          = new xts_entity();
            var accessor        = new EntityAccessor <xts_entity>(entity);

            accessor.Set(e => e.xts_activityparties, entityReference);

            var collection    = accessor.Get(e => e.xts_activityparties);
            var activityParty = collection.Entities[0].ToEntity <ActivityParty>();

            Assert.Equal(entityReference, activityParty.Get(e => e.PartyId));
        }
Exemple #23
0
        public void Can_get_aliased_value()
        {
            var entity = new Entity("lead")
            {
                Id          = Guid.NewGuid(),
                ["aliased"] = new AliasedValue(null, null, new Money(1234m))
            };

            var accessor = new EntityAccessor <Entity>(entity);

            Assert.Equal(1234m, accessor.GetAliasedValue <Money>("aliased").Value);
            Assert.Null(accessor.GetAliasedValue <EntityReference>("not_exists"));
        }
Exemple #24
0
        public void Can_get_attribute_value()
        {
            var entity = new xts_entity
            {
                Id = Guid.NewGuid()
            };
            var reference = new EntityReference("reference", Guid.NewGuid());

            entity["xts_attribute"] = reference;

            var accessor = new EntityAccessor <xts_entity>(entity);

            Assert.Equal(reference, accessor.Get <EntityReference>("xts_attribute"));
        }
Exemple #25
0
        public void Can_set_money_from_decimal_value_provider()
        {
            var decimalValueProvider = Substitute.For <IValueProvider <decimal> >();

            decimalValueProvider.GetValue().Returns(1500m);

            var entity = new xts_entity {
                Id = Guid.NewGuid()
            };
            var accessor = new EntityAccessor <xts_entity>(entity);

            accessor.Set(e => e.xts_money, decimalValueProvider);

            Assert.Equal(1500m, entity.Get(e => e.xts_money).Value);
        }
Exemple #26
0
        public void Can_set_through_attribute_value_provider_generic()
        {
            var valueProvider = Substitute.For <IAttributeValueProvider <xts_entity, string> >();

            valueProvider.GetValueFor(Arg.Any <Expression <Func <xts_entity, string> > >()).Returns("1234");

            var entity = new xts_entity {
                Id = Guid.NewGuid()
            };
            var accessor = new EntityAccessor <xts_entity>(entity);

            accessor.Set(e => e.xts_string, valueProvider);

            Assert.Equal("1234", entity.Get(e => e.xts_string));
        }
Exemple #27
0
        public void Can_set_through_value_provider_generic()
        {
            var valueProvider = Substitute.For <IValueProvider <string> >();

            valueProvider.GetValue().Returns("1234");

            var entity = new xts_entity {
                Id = Guid.NewGuid()
            };
            var accessor = new EntityAccessor <xts_entity>(entity);

            accessor.Set(e => e.xts_string, valueProvider);

            Assert.Equal("1234", entity.Get(e => e.xts_string));
        }
Exemple #28
0
        [Fact] // Assume ActivityParty
        public void Can_set_entity_collection_using_entity_references()
        {
            var equipmentReference = new EntityReference("equipment", Guid.NewGuid());
            var leadReference      = new EntityReference("lead", Guid.NewGuid());
            var references         = new[] { equipmentReference, leadReference };
            var entity             = new xts_entity();
            var accessor           = new EntityAccessor <xts_entity>(entity);

            accessor.Set(e => e.xts_activityparties, references);

            var collection = accessor.Get(e => e.xts_activityparties);

            Assert.Equal(equipmentReference, collection.Entities[0].ToEntity <ActivityParty>().Get(e => e.PartyId));
            Assert.Equal(leadReference, collection.Entities[1].ToEntity <ActivityParty>().Get(e => e.PartyId));
        }
Exemple #29
0
        public void Can_use_equal_string_attribute_name()
        {
            var id        = Guid.NewGuid();
            var reference = new EntityReference("xts_reference", id);
            var entity    = new xts_entity {
                Id = Guid.NewGuid()
            };

            entity.Set(e => e.xts_referenceid, reference);
            var accessor = new EntityAccessor <xts_entity>(entity);

            var comparisonValue = new EntityReference("xts_reference", id);

            Assert.True(accessor.Equal("xts_referenceid", comparisonValue));
            Assert.False(accessor.Equal("xts_referenceid", new EntityReference("xts_reference", Guid.NewGuid())));
        }
Exemple #30
0
        public void Can_get_value_nullable_type()
        {
            var entity   = new xts_entity();
            var accessor = new EntityAccessor <xts_entity>(entity);

            Assert.Equal(0, accessor.GetValue(e => e.xts_int));
            Assert.Equal(111, accessor.GetValue(e => e.xts_int, 111));
            entity.Set(e => e.xts_int, 123);
            Assert.Equal(123, accessor.GetValue(e => e.xts_int));
            Assert.Equal(123, accessor.GetValue(e => e.xts_int, 3333));

            Assert.Equal(0m, accessor.GetValue(e => e.xts_decimal));
            Assert.Equal(1000m, accessor.GetValue(e => e.xts_decimal, 1000m));
            entity.Set(e => e.xts_decimal, 2300m);
            Assert.Equal(2300m, accessor.GetValue(e => e.xts_decimal));
            Assert.Equal(2300m, accessor.GetValue(e => e.xts_decimal, 4000m));
        }