/// <summary> /// Init type Sql provider /// </summary> /// <param name="sqlConnector"></param> private void InitSqlConnector(ESqlConnector sqlConnector) { SqlConnector = sqlConnector; switch (SqlConnector) { case ESqlConnector.MSSQL: TableName = TableName.Insert(0, "["); TableName = TableName.Insert(TableName.Length, "]"); foreach (var propertyMetadata in SqlProperties) { propertyMetadata.ColumnName = propertyMetadata.ColumnName.Insert(0, "["); propertyMetadata.ColumnName = propertyMetadata.ColumnName.Insert(propertyMetadata.ColumnName.Length, "]"); } foreach (var propertyMetadata in KeySqlProperties) { propertyMetadata.ColumnName = propertyMetadata.ColumnName.Insert(0, "["); propertyMetadata.ColumnName = propertyMetadata.ColumnName.Insert(propertyMetadata.ColumnName.Length, "]"); } break; case ESqlConnector.MySQL: break; case ESqlConnector.PostgreSQL: //todo: ковычки break; default: throw new ArgumentOutOfRangeException(nameof(SqlConnector)); } }
/// <summary> /// Constructor /// </summary> public SqlGenerator(ESqlConnector sqlConnector) { InitProperties(); InitSqlConnector(sqlConnector); InitLogicalDeleted(); //todo: init joins }
/// <summary> /// 确定是否已经存在缓存 /// </summary> /// <param name="key"></param> /// <returns></returns> public static ISqlGenerator <TEntiy> ExistModelDesCache <TEntiy>(ESqlConnector eSql) where TEntiy : class { object value; _ModelDesCache.TryGetValue(typeof(TEntiy).Name.GetHashCode(), out value); if (null == value) { value = Add <TEntiy>(eSql); } return(value as ISqlGenerator <TEntiy>); }
public static IDbConnection CreateDbConnection(ESqlConnector enumDataBase, string connectionStr = "") { if (string.IsNullOrWhiteSpace(connectionStr)) { connectionStr = GetConnectionStr(enumDataBase); } switch (enumDataBase) { case ESqlConnector.MySql: return(new MySqlConnection(connectionStr)); case ESqlConnector.Mssql: return(new SqlConnection(connectionStr)); default: throw new Exception("没用找的IDbConnection的实例类型"); } }
public static ISqlGenerator <TEntiy> Add <TEntiy>(ESqlConnector eSql) where TEntiy : class { object generator; lock (objLock) { var entityType = typeof(TEntiy).Name.GetHashCode(); if ((!_ModelDesCache.ContainsKey(entityType))) { generator = new SqlGenerator <TEntiy>(eSql); _ModelDesCache.Add(entityType, generator); } else { _ModelDesCache.TryGetValue(typeof(TEntiy).Name.GetHashCode(), out generator); } } return(generator as ISqlGenerator <TEntiy>); }
/// <summary> /// Init type Sql provider /// </summary> /// <param name="sqlConnector"></param> private void InitSqlConnector(ESqlConnector sqlConnector) { SqlConnector = sqlConnector; switch (SqlConnector) { case ESqlConnector.MSSQL: TableName = "[" + TableName + "]"; foreach (var propertyMetadata in SqlProperties) { propertyMetadata.ColumnName = "[" + propertyMetadata.ColumnName + "]"; } foreach (var propertyMetadata in KeySqlProperties) { propertyMetadata.ColumnName = "[" + propertyMetadata.ColumnName + "]"; } break; case ESqlConnector.MySQL: TableName = "`" + TableName + "`"; foreach (var propertyMetadata in SqlProperties) { propertyMetadata.ColumnName = "`" + propertyMetadata.ColumnName + "`"; } foreach (var propertyMetadata in KeySqlProperties) { propertyMetadata.ColumnName = "`" + propertyMetadata.ColumnName + "`"; } break; case ESqlConnector.PostgreSQL: break; default: throw new ArgumentOutOfRangeException(nameof(SqlConnector)); } }
/// <summary> /// 获取连接字符串 /// </summary> /// <returns></returns> private static string GetConnectionStr(ESqlConnector enumDataBase) { var conntectStr = ""; switch (enumDataBase) { case ESqlConnector.MySql: conntectStr = ConfigurationHelper.GetInstance().GetSection("db").GetSection("mysql").GetSection("connectionStr").Value; break; case ESqlConnector.Mssql: conntectStr = ConfigurationHelper.GetInstance().GetSection("db").GetSection("sqlserver").GetSection("connectionStr").Value; break; case ESqlConnector.PostgreSql: break; default: throw new Exception("没用找的IDbConnection的实例类型"); } return(conntectStr); }
/// <summary> /// Constructor /// </summary> public SqlGenerator(ESqlConnector sqlConnector, bool useQuotationMarks = false) : this(new SqlGeneratorConfig { SqlConnector = sqlConnector, UseQuotationMarks = useQuotationMarks }) { }
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 DapperRepository(IDbConnection connection, ESqlConnector sqlConnector) { Connection = connection; SqlGenerator = new SqlGenerator <TEntity>(sqlConnector); }
public Repository(IDbConnection connection, ESqlConnector sqlConnector, ILogger logger = null) { Connection = connection; SqlGenerator = new SqlGenerator <TEntity>(sqlConnector); Logger = logger; }
public RepositorioGenericoDapper(IDbConnection conexao, ESqlConnector sqlConnector) { Conexao = conexao; GeradorSQL = new SqlGenerator <TEntity>(sqlConnector); }