コード例 #1
0
ファイル: CommandParameter.cs プロジェクト: ali-zare/Abi
        static CommandParameter()
        {
            configuration = EntityContextConfiguration.GetConfiguration <TEntityContext>();

            KeyProperty          = CommandParameterKeyProperty <TEntityContext, TEntity> .Default;
            TrackableProperties  = CommandParameterTrackableProperties <TEntityContext, TEntity> .Default;
            AcceptableProperties = CommandParameterAcceptableProperties <TEntityContext, TEntity> .Default;
        }
コード例 #2
0
        static EntityDatabaseWriterInsert()
        {
            EntityContextConfiguration <TEntityContext> configuration = EntityContextConfiguration.GetConfiguration <TEntityContext>();

            Type typeEntity = typeof(TEntity);

            PropertyInfo key = configuration.EntityKeys.GetPropEntityKey(typeEntity);

            #region Generate CallBackData Setter

            #region Expression Tree
#if ET
            {
                Type typeData      = EntityProxy <TEntity> .DataType;
                Type typeProxyData = typeof(EntityProxy <,>).MakeGenericType(new[] { typeEntity, typeData });

                Type typeEntitySet = typeof(EntitySet <>).MakeGenericType(typeEntity);

                MethodInfo propEntitySetGetMthd = typeEntity.GetProperty("EntitySet", typeEntitySet).GetGetMethod(true);
                MethodInfo mthdOnPropChng       = typeEntity.GetMethod("OnPropertyChanged", BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(string) }, null);
                MethodInfo propDataGetMthd      = typeEntity.GetProperty("Data", BindingFlags.NonPublic | BindingFlags.Instance).GetGetMethod(true);
                FieldInfo  fldItem = typeProxyData.GetField("item");

                ParameterExpression dr = Expression.Parameter(typeof(SqlDataReader), "dr");
                ParameterExpression e  = Expression.Parameter(typeof(TEntity), "e");

                Expression[] expressions = new Expression[2];

                //key expressions

                expressions[0] = Expression.Assign(Expression.Field(Expression.Field(Expression.TypeAs(Expression.Call(e, propDataGetMthd), typeProxyData), fldItem), typeData.GetField(key.Name)), Expression.Call(key.GetDataReaderGetValueMethod(), dr, Expression.Constant(0)));
                expressions[1] = Expression.Call(e, mthdOnPropChng, Expression.Constant(key.Name));

                SetCallBackData = Expression.Lambda <Action <SqlDataReader, TEntity> >(Expression.Block(expressions), dr, e).Compile();
            }
#endif
            #endregion Expression Tree

            #region IL
#if IL
            {
            }
#endif
            #endregion IL

            #endregion Generate CallBackData Setter
        }
コード例 #3
0
        static EntityDatabaseWriterInsert()
        {
            EntityContextConfiguration <TEntityContext> configuration = EntityContextConfiguration.GetConfiguration <TEntityContext>();

            Type typeEntity         = typeof(TEntity);
            Type typeEntityCallBack = typeof(TEntityCallBack);

            PropertyInfo key = configuration.EntityKeys.GetPropEntityKey(typeEntity);

            PropertyInfo[] entityCallBackProperties = typeEntityCallBack.GetEntityAcceptableDataProperties().ToArray();

            #region Generate CallBackData Setter

            #region Expression Tree
#if ET
            {
                int counter = 0;
                int index   = 0;
                int resize  = 0;

                Type typeData      = EntityProxy <TEntity> .DataType;
                Type typeProxyData = typeof(EntityProxy <,>).MakeGenericType(new[] { typeEntity, typeData });

                Type typeEntitySet = typeof(EntitySet <>).MakeGenericType(typeEntity);

                MethodInfo propEntitySetGetMthd = typeEntity.GetProperty("EntitySet", typeEntitySet).GetGetMethod(true);
                MethodInfo mthdOnPropChng       = typeEntity.GetMethod("OnPropertyChanged", BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(string) }, null);
                MethodInfo propDataGetMthd      = typeEntity.GetProperty("Data", BindingFlags.NonPublic | BindingFlags.Instance).GetGetMethod(true);
                FieldInfo  fldItem = typeProxyData.GetField("item");

                ParameterExpression dr = Expression.Parameter(typeof(SqlDataReader), "dr");
                ParameterExpression e  = Expression.Parameter(typeof(TEntity), "e");

                Expression[] expressions = new Expression[(entityCallBackProperties.Length + 1) * 2];

                //key expressions

                expressions[counter++] = Expression.Assign(Expression.Field(Expression.Field(Expression.TypeAs(Expression.Call(e, propDataGetMthd), typeProxyData), fldItem), typeData.GetField(key.Name)), Expression.Call(key.GetDataReaderGetValueMethod(), dr, Expression.Constant(index++)));
                expressions[counter++] = Expression.Call(e, mthdOnPropChng, Expression.Constant(key.Name));

                foreach (PropertyInfo propCallBack in entityCallBackProperties)
                {
                    PropertyInfo   propEntity     = typeEntity.GetProperty(propCallBack.Name);
                    EntityRelation entityRelation = configuration.EntityRelations.GetEntityRelation(propEntity);

                    if (entityRelation == null)
                    {
                        expressions[counter++] = Expression.Assign(Expression.Field(Expression.Field(Expression.TypeAs(Expression.Call(e, propDataGetMthd), typeProxyData), fldItem), typeData.GetField(propCallBack.Name)), Expression.Call(propCallBack.GetDataReaderGetValueMethod(), dr, Expression.Constant(index++)));
                        expressions[counter++] = Expression.Call(e, mthdOnPropChng, Expression.Constant(propCallBack.Name));
                    }
                    else
                    {
                        Type typeEditedEntity   = typeof(EditedEntity <,>).MakeGenericType(typeEntity, propCallBack.PropertyType);
                        Type typeEditedProperty = typeof(EditedProperty <>).MakeGenericType(propCallBack.PropertyType);

                        ConstructorInfo ctrEdtdProp = typeEditedProperty.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(PropertyInfo), propCallBack.PropertyType, propCallBack.PropertyType }, null);
                        ConstructorInfo ctrEdtdEnty = typeEditedEntity.GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeEditedProperty, typeof(TrakMode) }, null);

                        Expression expNewEdtdProp = Expression.New(ctrEdtdProp, new Expression[] { Expression.Constant(propEntity), Expression.Field(Expression.Field(Expression.TypeAs(Expression.Call(e, propDataGetMthd), typeProxyData), fldItem), typeData.GetField(propCallBack.Name)), Expression.Call(propCallBack.GetDataReaderGetValueMethod(), dr, Expression.Constant(index++)) });
                        Expression expNewEdtdEnty = Expression.New(ctrEdtdEnty, new Expression[] { expNewEdtdProp, Expression.Constant(TrakMode.None) });

                        MethodInfo mthdCallBack = typeof(EntitySet <TEntity>).GetMethod("CallBack", BindingFlags.NonPublic | BindingFlags.Instance).MakeGenericMethod(propCallBack.PropertyType);

                        expressions[counter++] = Expression.Call(Expression.Call(e, propEntitySetGetMthd), mthdCallBack, new[] { e, expNewEdtdEnty });

                        resize++;
                    }
                }

                if (resize > 0)
                {
                    Array.Resize(ref expressions, expressions.Length - resize);
                }

                SetCallBackData = Expression.Lambda <Action <SqlDataReader, TEntity> >(Expression.Block(expressions), dr, e).Compile();
            }
#endif
            #endregion Expression Tree

            #region IL
#if IL
            {
            }
#endif
            #endregion IL

            #endregion Generate CallBackData Setter
        }