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); }
//İ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); }
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); } }
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)); }
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); }
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); } } }
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); }
//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); }
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); }
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); }
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); }
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. }
//从数据读取器获取实例 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); }
public IEnumerable <IEntityRule> GetDomainRules(IBaseEntity baseEntity, IClientInfo clientInfo) { return(baseEntity == null ? new List <IEntityRule>(): GetDomainRules(baseEntity.GetType(), clientInfo)); }
//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); }
//获取单独实例 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); } } } }
public IEntityRule GetDomainRule(IBaseEntity baseEntity, IClientInfo clientInfo) { return(baseEntity == null ? null: GetDomainRule(baseEntity.GetType(), clientInfo)); }
//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); }
public static TSchema ConvertEntityToSchema <TSchema>(this IBaseEntity entity) where TSchema : class, ISchema { return((TSchema)Mapper.Map(entity, entity.GetType(), typeof(TSchema))); }
public IEntityRule GetDomainRules(IBaseEntity baseEntity, IClientInfo clientInfo) { return(GetDomainRule(baseEntity.GetType())); // throw new NotImplementedException(); }