private void InitProperties() { var entityType = typeof(TEntity); var entityTypeInfo = entityType.GetTypeInfo(); var tableAttribute = entityTypeInfo.GetCustomAttribute <TableAttribute>(); TableName = tableAttribute != null ? tableAttribute.Name : entityTypeInfo.Name; TableSchema = tableAttribute != null ? tableAttribute.Schema : string.Empty; AllProperties = entityType.FindClassProperties().Where(q => q.CanWrite).ToArray(); var props = AllProperties.Where(ExpressionHelper.GetPrimitivePropertiesPredicate()).ToArray(); var joinProperties = AllProperties.Where(p => p.GetCustomAttributes <JoinAttributeBase>().Any()).ToArray(); SqlJoinProperties = GetJoinPropertyMetadata(joinProperties); // Filter the non stored properties SqlProperties = props.Where(p => !p.GetCustomAttributes <NotMappedAttribute>().Any()).Select(p => new SqlPropertyMetadata(p)).ToArray(); // Filter key properties KeySqlProperties = props.Where(p => p.GetCustomAttributes <KeyAttribute>().Any()).Select(p => new SqlPropertyMetadata(p)).ToArray(); // Use identity as key pattern var identityProperty = props.FirstOrDefault(p => p.GetCustomAttributes <IdentityAttribute>().Any()); IdentitySqlProperty = identityProperty != null ? new SqlPropertyMetadata(identityProperty) : null; var dateChangedProperty = props.FirstOrDefault(p => p.GetCustomAttributes <UpdatedAtAttribute>().Count() == 1); if (dateChangedProperty != null && (dateChangedProperty.PropertyType == typeof(DateTime) || dateChangedProperty.PropertyType == typeof(DateTime?))) { UpdatedAtProperty = props.FirstOrDefault(p => p.GetCustomAttributes <UpdatedAtAttribute>().Any()); UpdatedAtPropertyMetadata = new SqlPropertyMetadata(UpdatedAtProperty); } }
public SqlGenerator(ESqlConnector sqlConnector) { SqlConnector = sqlConnector; var entityType = typeof(TEntity); var entityTypeInfo = entityType.GetTypeInfo(); var aliasAttribute = entityTypeInfo.GetCustomAttribute <TableAttribute>(); this.TableName = aliasAttribute != null ? aliasAttribute.Name : entityTypeInfo.Name; AllProperties = entityType.GetProperties(); //Load all the "primitive" entity properties var props = AllProperties.Where(ExpressionHelper.GetPrimitivePropertiesPredicate()).ToArray(); //Filter the non stored properties this.BaseProperties = props.Where(p => !p.GetCustomAttributes <NotMappedAttribute>().Any()).Select(p => new PropertyMetadata(p)); //Filter key properties this.KeyProperties = props.Where(p => p.GetCustomAttributes <KeyAttribute>().Any()).Select(p => new PropertyMetadata(p)); //Use identity as key pattern var identityProperty = props.FirstOrDefault(p => p.GetCustomAttributes <IdentityAttribute>().Any()); this.IdentityProperty = identityProperty != null ? new PropertyMetadata(identityProperty) : null; //Status property (if exists, and if it does, it must be an enumeration) var statusProperty = props.FirstOrDefault(p => p.GetCustomAttributes <StatusAttribute>().Any()); if (statusProperty == null) { return; } StatusProperty = new PropertyMetadata(statusProperty); if (statusProperty.PropertyType.IsBool()) { var deleteProperty = props.FirstOrDefault(p => p.GetCustomAttributes <DeletedAttribute>().Any()); if (deleteProperty == null) { return; } LogicalDelete = true; LogicalDeleteValue = 1; // true } else if (statusProperty.PropertyType.IsEnum()) { var deleteOption = statusProperty.PropertyType.GetFields() .FirstOrDefault(f => f.GetCustomAttribute <DeletedAttribute>() != null); if (deleteOption == null) { return; } var enumValue = Enum.Parse(statusProperty.PropertyType, deleteOption.Name); if (enumValue != null) { LogicalDeleteValue = Convert.ChangeType(enumValue, Enum.GetUnderlyingType(statusProperty.PropertyType)); } LogicalDelete = true; } }
public IClassNetCacheProperty GetProperty(int id) { return(AllProperties.Where(x => x.Id == id).Single()); }
private void InitProperties() { var entityType = typeof(TEntity); var entityTypeInfo = entityType.GetTypeInfo(); var tableAttribute = entityTypeInfo.GetCustomAttribute <TableAttribute>(); TableName = tableAttribute != null ? tableAttribute.Name : entityTypeInfo.Name; TableSchema = tableAttribute != null ? tableAttribute.Schema : string.Empty; AllProperties = entityType.FindClassProperties().Where(q => q.CanWrite).ToArray(); var props = AllProperties.Where(ExpressionHelper.GetPrimitivePropertiesPredicate()).ToArray(); var joinProperties = AllProperties.Where(p => p.GetCustomAttributes <JoinAttributeBase>().Any()).ToArray(); SqlJoinProperties = GetJoinPropertyMetadata(joinProperties); // Filter the non stored properties SqlProperties = props.Where(p => !p.GetCustomAttributes <NotMappedAttribute>().Any()).Select(p => new SqlPropertyMetadata(p)).ToArray(); KeyUpsertSqlProperties = props.Where(e => e.GetCustomAttributes <UpsertKeyAttribute>().Any()) .Select(p => new SqlPropertyMetadata(p)) .ToArray(); // Filter key properties KeySqlProperties = props.Where(p => p.GetCustomAttributes <KeyAttribute>().Any()).Select(p => new SqlPropertyMetadata(p)).ToArray(); if (!KeySqlProperties.Any()) { var prop = props.SingleOrDefault(p => p.Name.Equals("Id", StringComparison.OrdinalIgnoreCase)); //skip adding key if prop is null, which means the model doesn't have Id property.... if (prop != null) { KeySqlProperties = new SqlPropertyMetadata[1]; KeySqlProperties[0] = new SqlPropertyMetadata(prop); } } // Use identity as key pattern var identityProperty = props.FirstOrDefault(p => p.GetCustomAttributes <IdentityAttribute>().Any()); IdentitySqlProperty = identityProperty != null ? new SqlPropertyMetadata(identityProperty) : null; var dateChangedProperty = props.FirstOrDefault(p => p.GetCustomAttributes <UpdatedAtAttribute>().Count() == 1); if (dateChangedProperty != null && (dateChangedProperty.PropertyType == typeof(DateTime) || dateChangedProperty.PropertyType == typeof(DateTime?))) { UpdatedAtProperty = props.FirstOrDefault(p => p.GetCustomAttributes <UpdatedAtAttribute>().Any()); UpdatedAtPropertyMetadata = new SqlPropertyMetadata(UpdatedAtProperty); } var modifiedDateProperty = props.FirstOrDefault(p => p.GetCustomAttributes <ModifiedAtAttribute>().Count() == 1); if (modifiedDateProperty != null && (modifiedDateProperty.PropertyType == typeof(DateTime) || modifiedDateProperty.PropertyType == typeof(DateTime?))) { ModifiedAtProperty = props.FirstOrDefault(p => p.GetCustomAttributes <ModifiedAtAttribute>().Any()); ModifiedAtPropertyMetadata = new SqlPropertyMetadata(ModifiedAtProperty); } }
public string Get(string prop) { return(string.Join(", ", AllProperties .Where(r => r.Name.Equals(prop, System.StringComparison.OrdinalIgnoreCase)) .Select(a => a.Value).Distinct().ToArray())); }