예제 #1
0
        private string TypeParticle(IBaseEntity entity)
        {
            if (entity != null)
            {
                if (typeof(FieldType).IsAssignableFrom(entity.GetType()))
                {
                    return(FieldTypeParticle);
                }
                if (typeof(Record).IsAssignableFrom(entity.GetType()))
                {
                    return(RecordParticle);
                }

                /*if (typeof(Workflow).IsAssignableFrom(entity.GetType()) ||
                 *  typeof(WorkflowTagContainer).IsAssignableFrom(entity.GetType()))
                 *  return WorkflowParticle;
                 * if (typeof(WorkflowUICommand).IsAssignableFrom(entity.GetType()) ||
                 *  typeof(WorkflowUICommandTagContainer).IsAssignableFrom(entity.GetType()))
                 *  return DialogParticle;
                 * if (typeof(WorkflowQueryCommand).IsAssignableFrom(entity.GetType()) ||
                 *  typeof(WorkflowQueryCommandTagContainer).IsAssignableFrom(entity.GetType()))
                 *  return QueryParticle;
                 * if (typeof(View).IsAssignableFrom(entity.GetType()) ||
                 *  typeof(ViewTagContainer).IsAssignableFrom(entity.GetType()))
                 *  return ViewParticle;
                 * if (typeof(WorkflowCommand).IsAssignableFrom(entity.GetType()) ||
                 *  typeof(CommandTagContainer).IsAssignableFrom(entity.GetType()))
                 *  return CommandParticle;
                 * if (typeof(Entity).IsAssignableFrom(entity.GetType()))
                 *  return EntityParticle;
                 * if (typeof(Event).IsAssignableFrom(entity.GetType()) ||
                 *  typeof(EventTagContainer).IsAssignableFrom(entity.GetType()))
                 *  return EventParticle;
                 * if (typeof(EventProperty).IsAssignableFrom(entity.GetType()))
                 *  return EventPropertyParticle;
                 * if (typeof(RecordList).IsAssignableFrom(entity.GetType()))
                 *  return ListParticle;
                 * if (typeof(Report).IsAssignableFrom(entity.GetType()))
                 *  return ReportParticle;
                 * if (typeof(Subscription).IsAssignableFrom(entity.GetType()) ||
                 *  typeof(SubscriptionTagContainer).IsAssignableFrom(entity.GetType()))
                 *  return SubscriptionParticle;
                 * if (typeof(WorkflowDialogActivityEvent).IsAssignableFrom(entity.GetType()))
                 *  return WorkflowDialogEventParticle;
                 * if (typeof(WorkflowActivity).IsAssignableFrom(entity.GetType()))
                 *  return ActivityParticle;*/
            }
            return(string.Empty);
        }
예제 #2
0
        //İki tane functions olacak EntityConvert suan yapılacak
        //Convert işlemi yaparken iki adet entity ihtiyacımız bulunmaktadır.
        //1 tanesi kaynak Entity diğeri Hedef Entity
        //Kaynak entity property arasına dolaşıp hedef teki ile karşılaştırıcağız. Aynı ise
        //Kaynaktakini alıp hedefe atacağız.

        //Oluşturacağımız function ı extensions method olarak oluşturacağız.
        //Extensions oluşturabilmemiz için class ve function ın static olması lazım ve ilk değişken this ile başlamı

        //Source u IBaseEntity tanımlamamızın neden biliyoruz ki bütün entitylerimiz IBaseEntity den implemente olacak ve  her halikarda bu şekilde bir kaynak gelecek

        public static TTarget EntityConvert <TTarget>(this IBaseEntity source)
        {
            if (source == null)
            {
                return(default(TTarget));
            }

            //Bu şekilde hedef entitytim olan TTarget dan bir instance üretmiş olduk.
            var hedef = Activator.CreateInstance <TTarget>();

            //Kaynak ve hedef entity property lerine reflection ile ulaşabiliriz.

            var kaynakProp = source.GetType().GetProperties();
            var hedefProp  = typeof(TTarget).GetProperties();

            foreach (var kp in kaynakProp)
            {
                //Kaynak property in value sunu alıyoruz.
                //Kaynak property değerine ulaştık
                var value = kp.GetValue(source);

                //hedef property ulaşmaya çalışıyoruz.
                //Gelen kaynak prop ismini al hedef te ara buluyosan at bulamıyorsn null gelir burası
                var hp = hedefProp.FirstOrDefault(x => x.Name == kp.Name);

                if (hp != null)
                {
                    //kAYNAKTAN gelen verilerde boi ise tırnak olarak geliyor tırnak ise null olarak kayıt edilmesini istiyorsak veritabanına aşağıdaki gibi yapıyoruz.
                    hp.SetValue(hedef, ReferenceEquals(value, "") ? null : value);
                }
            }
            return(hedef);
        }
예제 #3
0
        private static void UpdateModel <V>(this V viewModel, IBaseEntity entity)
            where V : DomainViewModel
        {
            if (entity == null)
            {
                return;
            }

            var props = viewModel
                        .GetType()
                        .GetProperties()
                        .Where(w => w.PropertyType.IsSubclassOf(typeof(DomainEntityType)));

            foreach (var prop in props)
            {
                dynamic source   = prop.GetValue(viewModel, null);
                var     srcValue =
                    ((IDomainEntityType)
                     (entity.GetType()
                      .GetProperty(prop.Name)
                      .GetValue(entity, null))).Attributes;

                source.Attributes = srcValue;
                prop.SetValue(viewModel, source, null);
            }
        }
예제 #4
0
        public static bool IsSplittedType(IBaseEntity entity)
        {
            Type type = entity.GetType();

            return(typeof(WorkflowFormalParameter).IsAssignableFrom(type) ||
                   typeof(WorkflowUICommandList).IsAssignableFrom(type) ||
                   typeof(WorkflowUICommandFormat).IsAssignableFrom(type) ||
                   typeof(EventProperty).IsAssignableFrom(type));
        }
예제 #5
0
        public bool OnLoad(Type type, IBaseEntity entity)
        {
            var properties = GetProperties(type);

            bool propertiesChanged = false;

            foreach (var property in properties)
            {
                var    attr          = property.GetCustomAttribute <DateTimeFormatAttribute>();
                object propertyValue = property.GetValue(entity, null);

                if (propertyValue != null)
                {
                    DateTime dateTimeValue = (DateTime)propertyValue;
                    if (dateTimeValue.Kind != DateTimeKind.Unspecified)
                    {
                        //Sanity check
                        throw new ArgumentException(
                                  "DateTime property kind must be Unspecified, {0}.{1}".FormatString(
                                      entity.GetType().FullName,
                                      property.Name));
                    }

                    if (attr.IsUtc)
                    {
                        //All DateTimes in database is in UTC
                        dateTimeValue = new DateTime(
                            dateTimeValue.Year,
                            dateTimeValue.Month,
                            dateTimeValue.Day,
                            dateTimeValue.Hour,
                            dateTimeValue.Minute,
                            dateTimeValue.Second,
                            dateTimeValue.Millisecond,
                            DateTimeKind.Utc);
                    }
                    else
                    {
                        //All DateTimes in database is in UTC
                        dateTimeValue = new DateTime(
                            dateTimeValue.Year,
                            dateTimeValue.Month,
                            dateTimeValue.Day,
                            dateTimeValue.Hour,
                            dateTimeValue.Minute,
                            dateTimeValue.Second,
                            dateTimeValue.Millisecond,
                            DateTimeKind.Local);
                    }

                    property.SetValue(entity, dateTimeValue);
                    propertiesChanged = true;
                }
            }

            return(propertiesChanged);
        }
예제 #6
0
        public static void SetEntityId(IBaseEntity entity, object Id)
        {
            FieldInfo oField
                = entity.GetType().GetField("idValue"

                                            , BindingFlags.Public
                                            | BindingFlags.NonPublic
                                            | BindingFlags.Instance
                                            | BindingFlags.IgnoreCase);

            oField.SetValue(entity, Id);
        }
        private void UpdateITimeTrackingEntities(IBaseEntity entity, Action <ITimeTrackingEntity> action, bool recursive = true)
        {
            if (entity == null || action == null)
            {
                return;
            }

            Type iTimeTrackingType = typeof(ITimeTrackingEntity);

            if (iTimeTrackingType.IsAssignableFrom(entity.GetType()))
            {
                action(((ITimeTrackingEntity)entity));
            }

            foreach (var property in entity.GetType().GetProperties())
            {
                if (recursive && property.PropertyType.IsClass && typeof(IBaseEntity).IsAssignableFrom(property.PropertyType))
                {
                    UpdateITimeTrackingEntities((IBaseEntity)property.GetValue(entity), action);
                }
            }
        }
예제 #8
0
 private static string TypeParticle(IBaseEntity entity)
 {
     if (entity != null)
     {
         if (typeof(FieldType).IsAssignableFrom(entity.GetType()))
         {
             return(FieldTypeParticle);
         }
         else if (typeof(Record).IsAssignableFrom(entity.GetType()))
         {
             return(RecordParticle);
         }
         else if (typeof(RecordList).IsAssignableFrom(entity.GetType()))
         {
             return(ListParticle);
         }
         else if (typeof(Entity).IsAssignableFrom(entity.GetType()))
         {
             return(EntityParticle);
         }
         else if (typeof(WorkflowCommand).IsAssignableFrom(entity.GetType()))
         {
             return(CommandParticle);
         }
         else if (typeof(WorkflowFormalParameter).IsAssignableFrom(entity.GetType()))
         {
             return(FopaParticle);
         }
         else if (typeof(WorkflowUICommand).IsAssignableFrom(entity.GetType()))
         {
             return(DialogParticle);
         }
         else if (typeof(Event).IsAssignableFrom(entity.GetType()))
         {
             return(EventParticle);
         }
         else if (typeof(WorkflowQueryCommand).IsAssignableFrom(entity.GetType()))
         {
             return(QueryParticle);
         }
     }
     return(string.Empty);
 }
예제 #9
0
        //SQL命令 获取删除命令
        public static SqlCommand GetDeleteCommand(IBaseEntity info)
        {
            if (info == null)
            {
                return(null);
            }
            Type tp = info.GetType();

            string tbName;
            var    attrs = tp.GetCustomAttributes(typeof(EntityTableNameAttribute), false);

            if (attrs.Length > 0)
            {
                tbName = ((EntityTableNameAttribute)attrs[0]).TableName;
            }
            else
            {
                return(null);
            }

            var comm = new SqlCommand {
                CommandType = CommandType.Text
            };

            var sb             = new StringBuilder();
            var memberAccessor = new DynamicMethodMemberAccessor();

            sb.AppendFormat("DELETE FROM [{0}] WHERE ", tbName);

            foreach (PropertyInfo prop in tp.GetProperties())
            {
                var eca = Attribute.GetCustomAttribute(prop, typeof(EntityColumnAttribute)) as EntityColumnAttribute;
                if (eca != null && eca.Key)
                {
                    string paramName = string.Format("@{0}", prop.Name);
                    var    param     = new SqlParameter(paramName, eca.DataType)
                    {
                        Value = memberAccessor.GetValue(info, prop.Name)
                    };
                    comm.Parameters.Add(param);

                    sb.AppendFormat("[{0}] = {1}", eca.Field, paramName);
                    break;
                }
            }
            comm.CommandText = sb.ToString();
            return(comm);
        }
예제 #10
0
        public static TTarget EntityConvert <TTarget>(this IBaseEntity source)
        {
            if (source == null)
            {
                return(default(TTarget));
            }
            var target     = Activator.CreateInstance <TTarget>();
            var sourceProp = source.GetType().GetProperties();
            var targetProp = typeof(TTarget).GetProperties();

            foreach (var sourceproperty  in sourceProp)
            {
                var value          = sourceproperty.GetValue(source);
                var targetproperty = targetProp.FirstOrDefault(x => x.Name == sourceproperty.Name);
                if (targetproperty != null)
                {
                    targetproperty.SetValue(target, ReferenceEquals(value, "") ? null : value);
                }
            }
            return(target);
        }
예제 #11
0
        public static TTarget EntityConvert <TTarget>(this IBaseEntity source)
        {
            if (source == null)
            {
                return(default(TTarget));                //null ile defaultu dönsün yani null dönsün.
            }
            var hedef      = Activator.CreateInstance <TTarget>();
            var kaynakProp = source.GetType().GetProperties();
            var hedefProp  = typeof(TTarget).GetProperties();

            foreach (var kp in kaynakProp)
            {
                var value = kp.GetValue(source);
                var hp    = hedefProp.FirstOrDefault(x => x.Name == kp.Name);
                if (hp != null)
                {
                    hp.SetValue(hedef, ReferenceEquals(value, "") ? null : value);
                }
            }
            return(hedef);
        }
예제 #12
0
        public static TTarget EntityConvert <TTarget>(this IBaseEntity source)
        {
            if (source == null)
            {
                return(default(TTarget));
            }
            var hedef            = Activator.CreateInstance <TTarget>();
            var kaynakProperties = source.GetType().GetProperties();
            var hedefProperties  = typeof(TTarget).GetProperties();

            foreach (var kaynakprop in kaynakProperties)
            {
                var value     = kaynakprop.GetValue(source);
                var hedefprof = hedefProperties.FirstOrDefault(x => x.Name == kaynakprop.Name);
                if (hedefprof != null)
                {
                    hedefprof.SetValue(hedef, ReferenceEquals(value, "")?null:value);
                }
            }
            return(hedef);
        }
예제 #13
0
파일: Converts.cs 프로젝트: piakky/BIFIERP
        public static TTarget EntityConvert <TTarget>(this IBaseEntity source)
        {
            if (source == null)
            {
                return(default(TTarget));                          // if the source is empty we send by default
            }
            var target     = Activator.CreateInstance <TTarget>(); // We produce instance from TTarget
            var sourceProp = source.GetType().GetProperties();     // we will move between the properties of the resource.
            var targetProp = typeof(TTarget).GetProperties();      //we'll move between the properties of the target

            foreach (var sp in sourceProp)
            {
                var value = sp.GetValue(source);                                    //We take the values of the source.
                var tp    = targetProp.FirstOrDefault(x => x.Name == sp.Name);      //search the target properties in the target properties
                if (tp != null)                                                     //if the result is not the same
                {
                    tp.SetValue(target, ReferenceEquals(value, "") ? null : value); //If the data in the target e is not null if we are transferring the data, you pass the value
                }
            }
            return(target);//we complete and send the data.
        }
예제 #14
0
        //从数据读取器获取实例
        public static void GetEntityFromDataReader(SqlDataReader dr, ref IBaseEntity entity, bool getForeigns, bool getChldren)
        {
            var memberAccessor = new DynamicMethodMemberAccessor();
            var keyName        = "Id";

            foreach (PropertyInfo property in entity.GetType().GetProperties())
            {
                var mde = Attribute.GetCustomAttribute(property, typeof(EntityColumnAttribute)) as EntityColumnAttribute;
                if (mde != null)
                {
                    if (mde.Key)
                    {
                        keyName = property.Name;
                    }

                    if (getForeigns && mde.Foreign && !string.IsNullOrEmpty(mde.ForeignKey))
                    {
                        var fEntity = Activator.CreateInstance(property.PropertyType) as IBaseEntity;
                        if (fEntity != null)
                        {
                            GetSingleEntity(memberAccessor.GetValue(entity, mde.ForeignKey), ref fEntity);
                            memberAccessor.SetValue(entity, property.Name, fEntity);
                        }
                    }
                    else if (getChldren && mde.Children && !string.IsNullOrEmpty(mde.ChildKey))
                    {
                        var children = Activator.CreateInstance(property.PropertyType) as IList;
                        SearchByField(mde.ChildKey, memberAccessor.GetValue(entity, keyName), ref children);
                        memberAccessor.SetValue(entity, property.Name, children);
                    }
                    else
                    {
                        if (!string.IsNullOrEmpty(mde.Field) && !(dr[mde.Field] is DBNull))
                        {
                            memberAccessor.SetValue(entity, property.Name, dr[mde.Field]);
                        }
                    }
                }
            }
        }
        public static TTarget EntityConvert <TTarget>(this IBaseEntity source)
        {
            if (source == null)
            {
                return(default(TTarget));               //eğer null ise targetındefaultunu gonderıyoruz o da null zaten
            }
            var hedef      = Activator.CreateInstance <TTarget>();
            var kaynakProp = source.GetType().GetProperties();//reflectıon yoluyla soucrenın propertılerıne ulaşmış olduk
            var hedefProp  = typeof(TTarget).GetProperties();

            foreach (var kp in kaynakProp)
            {
                var value = kp.GetValue(source);//kaynak propun degerıne ulaşmış oluyoruz
                var hp    = hedefProp.FirstOrDefault(x => x.Name == kp.Name);
                if (hp != null)
                {
                    hp.SetValue(hedef, ReferenceEquals(value, "") ? null : value);
                }
                //diyelımkı gelen deger bos bır strıng verı tabanına tırnak kaydedılmesın dıye bu sekılde nulla esıtledık
            }
            return(hedef);
        }
예제 #16
0
 public IEnumerable <IEntityRule> GetDomainRules(IBaseEntity baseEntity, IClientInfo clientInfo)
 {
     return(baseEntity == null ? new List <IEntityRule>(): GetDomainRules(baseEntity.GetType(), clientInfo));
 }
예제 #17
0
        //SQL命令 获取插入命令
        public static SqlCommand GetInsertCommand(IBaseEntity info)
        {
            if (info == null)
            {
                return(null);
            }
            Type tp = info.GetType();

            string tbName;
            var    attrs = tp.GetCustomAttributes(typeof(EntityTableNameAttribute), false);

            if (attrs.Length > 0)
            {
                tbName = ((EntityTableNameAttribute)attrs[0]).TableName;
            }
            else
            {
                return(null);
            }

            var comm = new SqlCommand {
                CommandType = CommandType.Text
            };

            var sb             = new StringBuilder();
            var sbV            = new StringBuilder();
            var memberAccessor = new DynamicMethodMemberAccessor();

            sb.AppendFormat("INSERT INTO [{0}] (", tbName);
            sbV.Append(" VALUES (");

            foreach (PropertyInfo prop in tp.GetProperties())
            {
                var eca = Attribute.GetCustomAttribute(prop, typeof(EntityColumnAttribute)) as EntityColumnAttribute;
                if (eca != null && !eca.Key && !eca.Foreign && !eca.Children)
                {
                    sb.AppendFormat("[{0}],", eca.Field);
                    string paramName = string.Format("@{0}", prop.Name);
                    sbV.AppendFormat("{0},", paramName);
                    var param = new SqlParameter(paramName, eca.DataType);
                    param.Value = memberAccessor.GetValue(info, prop.Name);
                    if (param.Value == null && (eca.DataType == DbType.String || eca.DataType == DbType.AnsiString))
                    {
                        param.Value = DBNull.Value;
                    }
                    comm.Parameters.Add(param);
                }
            }
            sbV.Remove(sbV.Length - 1, 1).Append(");SELECT @ScopeIdentity = SCOPE_IDENTITY();");

            var idParam = new SqlParameter("@ScopeIdentity", SqlDbType.Int)
            {
                Direction = ParameterDirection.Output
            };

            comm.Parameters.Add(idParam);

            sb.Remove(sb.Length - 1, 1).Append(")").Append(sbV);
            comm.CommandText = sb.ToString();
            return(comm);
        }
예제 #18
0
        //获取单独实例
        public static void GetSingleEntity(object ov, ref IBaseEntity entity, bool getForeigns, bool getChldren)
        {
            if (ov == null)
            {
                return;
            }
            var    tp = entity.GetType();
            string tbName;
            var    attrs = tp.GetCustomAttributes(typeof(EntityTableNameAttribute), false);

            if (attrs.Length > 0)
            {
                tbName = ((EntityTableNameAttribute)attrs[0]).TableName;
            }
            else
            {
                return;
            }

            var sb = new StringBuilder();

            sb.AppendFormat("SELECT * FROM [{0}] WHERE ", tbName);

            var comm = new SqlCommand();

            foreach (PropertyInfo prop in tp.GetProperties())
            {
                var eca = Attribute.GetCustomAttribute(prop, typeof(EntityColumnAttribute)) as EntityColumnAttribute;
                if (eca != null)
                {
                    if ((ov is Int32 && eca.Key && eca.DataType == DbType.Int32) ||
                        (ov is String && (eca.Unique || eca.Key) && (eca.DataType == DbType.String || eca.DataType == DbType.AnsiString)) ||
                        (ov is Guid && (eca.Unique || eca.Key) && eca.DataType == DbType.Guid))
                    {
                        string paramName = string.Format("@{0}", prop.Name);
                        sb.AppendFormat("[{0}] = {1}", eca.Field, paramName);

                        var param = new SqlParameter(paramName, eca.DataType)
                        {
                            Value = ov
                        };
                        comm.Parameters.Add(param);
                    }
                }
            }
            comm.CommandType = CommandType.Text;
            comm.CommandText = sb.ToString();
            //Trace.WriteLine(ConnectionString);
            using (var conn = new SqlConnection(ConnectionString))
            {
                comm.Connection = conn;
                conn.Open();
                using (var dr = comm.ExecuteReader())
                {
                    if (dr.Read())
                    {
                        GetEntityFromDataReader(dr, ref entity, getForeigns, getChldren);
                    }
                }
            }
        }
예제 #19
0
 public IEntityRule GetDomainRule(IBaseEntity baseEntity, IClientInfo clientInfo)
 {
     return(baseEntity == null ? null: GetDomainRule(baseEntity.GetType(), clientInfo));
 }
예제 #20
0
        //SQL命令 获取更新命令
        public static SqlCommand GetUpdateCommand(IBaseEntity info)
        {
            if (info == null)
            {
                return(null);
            }
            Type tp = info.GetType();

            string tbName;
            var    attrs = tp.GetCustomAttributes(typeof(EntityTableNameAttribute), false);

            if (attrs.Length > 0)
            {
                tbName = ((EntityTableNameAttribute)attrs[0]).TableName;
            }
            else
            {
                return(null);
            }

            var comm = new SqlCommand {
                CommandType = CommandType.Text
            };

            var sb             = new StringBuilder();
            var sbW            = new StringBuilder();
            var memberAccessor = new DynamicMethodMemberAccessor();

            sb.AppendFormat("UPDATE [{0}] SET ", tbName);
            sbW.Append(" WHERE 1 = 2");

            foreach (PropertyInfo prop in tp.GetProperties())
            {
                var eca = Attribute.GetCustomAttribute(prop, typeof(EntityColumnAttribute)) as EntityColumnAttribute;
                if (eca != null && !eca.Foreign && !eca.Children)
                {
                    string paramName = string.Format("@{0}", prop.Name);
                    var    param     = new SqlParameter(paramName, eca.DataType)
                    {
                        Value = memberAccessor.GetValue(info, prop.Name)
                    };
                    if (param.Value == null && (eca.DataType == DbType.String || eca.DataType == DbType.AnsiString))
                    {
                        param.Value = DBNull.Value;
                    }
                    comm.Parameters.Add(param);

                    if (eca.Key || eca.Unique)
                    {
                        sbW.AppendFormat(" OR [{0}] = {1}", eca.Field, paramName);
                    }
                    else
                    {
                        sb.AppendFormat("[{0}] = {1},", eca.Field, paramName);
                    }
                }
            }
            sb.Remove(sb.Length - 1, 1).Append(sbW);
            comm.CommandText = sb.ToString();
            return(comm);
        }
예제 #21
0
 public static TSchema ConvertEntityToSchema <TSchema>(this IBaseEntity entity)
     where TSchema : class, ISchema
 {
     return((TSchema)Mapper.Map(entity, entity.GetType(), typeof(TSchema)));
 }
예제 #22
0
 public IEntityRule GetDomainRules(IBaseEntity baseEntity, IClientInfo clientInfo)
 {
     return(GetDomainRule(baseEntity.GetType()));
     // throw new NotImplementedException();
 }