/// <summary> /// 指定一个 <see cref="System.Xml.XmlNode"/> 节点动态生成一个对象。 /// </summary> /// <typeparam name="TEntity">实体的类型。</typeparam> /// <param name="node">System.Xml.XmlNode 节点。</param> /// <returns>返回一个填充数据后的新实体。</returns> public static Result <TEntity> BuildEntity <TEntity>(XmlNode node) where TEntity : new() { TEntity entity = new TEntity(); DynamicPropertyHelper <TEntity> helper = new DynamicPropertyHelper <TEntity>(entity); var flags = MemberFlags.InstanceSetPropertyFlags | BindingFlags.IgnoreCase; PropertyInfo p; object value; try { foreach (XmlAttribute attribute in node.Attributes) { p = helper.GetProperty(attribute.Name, flags); if (p.PropertyType == Types.String) { value = attribute.Value; } else { value = attribute.Value.CastTo(p.PropertyType); } helper[p] = attribute.Value; } } catch (Exception ex) { return(ex); } return(new Result <TEntity>(entity)); }
private IList <T> ParseResult(ArchiveExecutionContext executionContext, IList <ArchiveListItem> list) { List <T> results = new List <T>(); if (list == null) { return(null); } foreach (ArchiveListItem item in list) { T t = Activator.CreateInstance <T>(); foreach (string column in item.ColumnData.Keys) { foreach (string propertyName in DynamicPropertyHelper.GetPropertyNames <T>(column)) { string value = item.ColumnData[column].DisplayValue; object parsedValue = CultureDataFormatter.ParseEncoded(value); parsedValue = DoTypeSpecificConversion(executionContext, DynamicPropertyHelper.GetColumnInfo(typeof(T), propertyName), parsedValue); ObjectPropertyAccessor.SetValue(t, propertyName, parsedValue); } } results.Add(t); } return(results); }
protected override void SetDynamicValue(string propertyName, object value) { var dynamicContent = DynamicContent; DynamicPropertyHelper.SetDynamicProperty(ref dynamicContent, propertyName, value); DynamicContent = dynamicContent; }
private IList <T> InnerDoQuery(RestrictionBuilderBase restrictionBuilder, OrderByBuilder orderByBuilder, int max, int skip) { ArchiveExecutionContext executionContext = _archiveExecutionContextProvider.Get(); if (executionContext == null) { throw new InvalidOperationException(nameof(executionContext) + " not set, cannot be null"); } ArchiveQueryParameters context = new ArchiveQueryParameters(); context.ArchiveName = executionContext.ArchiveName; context.Entities = executionContext.Entities; context.RequestedColumns = DynamicPropertyHelper.GetAllDbColumnsPrefixed <T>(); int page = 0; if (skip > 0) { page = SetPageSizeAndGetPage(skip, max, context); } if (restrictionBuilder != null) { context.Restrictions = restrictionBuilder.GetRestrictions(); } if (orderByBuilder != null) { context.OrderBy = orderByBuilder.Get(); } return(_resultParser.Parse <T>(executionContext, _executor.GetItems(context, max, page))); }
public void TestGetColumnInfo(string propertyName, bool hasRawDbDataOn) { ColumnInfo result = DynamicPropertyHelper.GetColumnInfo(typeof(PropertyHelperTestCompany), propertyName); Assert.Equal("activated", result.Name); Assert.Equal(hasRawDbDataOn, result.UseRaw); }
public void TestGetColumnNameMultiEntity() { string companyResult = DynamicPropertyHelper.GetColumnName(typeof(PropertyHelperTestCompany), "Name"); string personResult = DynamicPropertyHelper.GetColumnName(typeof(TestPerson), "LastName"); Assert.Equal("name", companyResult); Assert.Equal("lastname", personResult); }
public void TestGetAllDbColumnsPrefixed() { IList <string> results = DynamicPropertyHelper.GetAllDbColumnsPrefixed <PropertyHelperTestCompany>(); Assert.NotEmpty(results); Assert.Equal(3, results.Count); Assert.Equal("testcompany.id", results[0]); Assert.Equal("testcompany.name", results[1]); Assert.Equal("testcompany.activated", results[2]); }
/// <summary> /// 指定绑定动态实现的类型,初始化 Sofire.Dynamic.Dynamic<I> 类的新实例。 /// </summary> /// <param name="instanceType">实例类型。</param> public Dynamic(Type instanceType) { if (instanceType == null) { throw new ArgumentNullException("instanceType"); } this._Fields = new DynamicFieldHelper <I>(instanceType); this._Methods = new DynamicMethodHelper <I>(instanceType); this._Properties = new DynamicPropertyHelper <I>(instanceType); }
public void TestGetAllDbColumns() { IList <string> results = DynamicPropertyHelper.GetAllDbColumns(typeof(PropertyHelperTestCompany)); Assert.NotEmpty(results); Assert.Equal(3, results.Count); Assert.Equal("id", results[0]); Assert.Equal("name", results[1]); Assert.Equal("activated", results[2]); }
public void TestConcurrentInitialization() { var tasks = new List <Task <string> >(); for (int i = 0; i < 10; i++) { tasks.Add(Task.Run(() => DynamicPropertyHelper.GetColumnName <PropertyHelperTestCompany>("Name"))); } Task.WaitAll(tasks.ToArray()); }
protected override object GetDynamicValue(string propertyName) { return(DynamicPropertyHelper.GetDynamicProperty(DynamicContent, propertyName)); }
public void TestColumnConfigProvider() { string test1Column = DynamicPropertyHelper.GetColumnName(typeof(TestAddress), nameof(TestAddress.Test1)); Assert.Equal(MockColumnConfigProvider.SUCCESS_COLUMN_NAME, test1Column); }
public void TestGetPropertyNamesGeneric() { string[] results = DynamicPropertyHelper.GetPropertyNames <PropertyHelperTestCompany>("id"); Assert.Equal(new[] { "PK", "Id" }, results); }
public void TestGetPropertyNames(string columnName, string[] expected) { string[] results = DynamicPropertyHelper.GetPropertyNames(typeof(PropertyHelperTestCompany), columnName); Assert.Equal(expected, results); }
public void TestGetFullDotSyntaxColumnNameGeneric() { string result = DynamicPropertyHelper.GetFullDotSyntaxColumnName <PropertyHelperTestCompany>("id"); Assert.Equal("testcompany.id", result); }
public void TestGetFullDotSyntaxColumnName() { string result = DynamicPropertyHelper.GetFullDotSyntaxColumnName("person", "id"); Assert.Equal("person.id", result); }
/// <summary> /// 指定绑定动态实现的实例,初始化 Sofire.Dynamic.Dynamic<I> 类的新实例。 /// </summary> /// <param name="instance">实例。可以为 null,表示动态实现 I 的静态字段。</param> public Dynamic(I instance) { this._Fields = new DynamicFieldHelper <I>(instance); this._Methods = new DynamicMethodHelper <I>(instance); this._Properties = new DynamicPropertyHelper <I>(instance); }
public void Add(string property, EOperator op, int level, InterRestrictionOperator interOperator, object value) { string column = DynamicPropertyHelper.GetColumnName <T>(property); AddRestriction <T>(column, op, interOperator, level, value); }
protected override Expression VisitMember(MemberExpression expression) { _column = DynamicPropertyHelper.GetColumnName(expression.Member.DeclaringType, expression.Member.Name); return expression; }
public void TestGetTableName() { string name = DynamicPropertyHelper.GetTableName(new PropertyHelperTestCompany()); Assert.Equal("testcompany", name); }
protected ArchiveRestrictionInfo CreateRestriction <T>(string column, EOperator op, InterRestrictionOperator interRestrictionOperator, int level, params object[] values) { string fullColumnName = DynamicPropertyHelper.GetFullDotSyntaxColumnName <T>(column); return(CreateRestriction(fullColumnName, op, interRestrictionOperator, level, values)); }
public void TestGetColumnName() { string result = DynamicPropertyHelper.GetColumnName(typeof(PropertyHelperTestCompany), "Id"); Assert.Equal("id", result); }
public void AddOrder <T>(string column, bool asc) { string fullColumnName = DynamicPropertyHelper.GetFullDotSyntaxColumnName <T>(column); AddOrder(fullColumnName, asc); }
private static string DisplayProperty(List <object> objectContainer, object instance, int depth) { if (instance == null) { return("null"); } var helper = new DynamicPropertyHelper <object>(instance); string spaceString = depth == 0 ? string.Empty : new string(' ', depth * 4); string propertySpaceString = spaceString + " "; StringBuilder builder = new StringBuilder(); builder.Append('#'); builder.Append(helper.InstanceType.Name); builder.AppendLine(); builder.Append(spaceString); builder.Append('{'); foreach (var propertyInfo in helper.GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.GetProperty | System.Reflection.BindingFlags.Public)) { builder.AppendLine(); builder.Append(propertySpaceString); builder.Append(propertyInfo.Name); builder.Append(' '); builder.Append(':'); builder.Append(' '); /* * #SimpleUser * { * ID : 5 * } */ var propertyValue = helper.CreateGetterHandler(propertyInfo)(instance); if (propertyValue == null) { builder.Append("null"); } else { var index = objectContainer.IndexOf(propertyValue); if (index > -1) { index++; PropertyInfo info = (PropertyInfo)objectContainer[index]; builder.Append("[#"); builder.Append(info.DeclaringType.FullName); builder.Append("]."); builder.Append(info.Name); continue; } Type valueType = propertyValue.GetType(); if (!valueType.IsValueType) { objectContainer.Add(propertyValue); objectContainer.Add(propertyInfo); } switch (Type.GetTypeCode(valueType)) { case TypeCode.Empty: builder.Append("Empty"); break; case TypeCode.DBNull: builder.Append("DBNull.Value"); break; case TypeCode.Char: builder.Append('\''); builder.Append(propertyValue); builder.Append('\''); break; case TypeCode.String: builder.Append('"'); builder.Append(propertyValue); builder.Append('"'); break; case TypeCode.Object: builder.Append(DisplayProperty(objectContainer, propertyValue, depth + 1)); break; default: builder.Append(propertyValue); break; } } builder.Append(","); } builder.AppendLine(); builder.Append(spaceString); builder.Append('}'); return(builder.ToString()); }