public static ObjectDataProvider <TConnection, TDataParameter> GetProvider <TConnection, TDataParameter>( this DataProviderMetaData @this, ICache cache, SqlCommandGenerator sqlCommandGenerator) where TConnection : DbConnection, new() where TDataParameter : IDbDataParameter, new() { return(ObjectDataProviderFactory <TConnection, TDataParameter> .Get(@this.Type, cache, sqlCommandGenerator)); }
void PrepareTableTemplate() { TablesTemplate = ""; DataProviderMetaData temp = null; void addTable(DataProviderMetaData medaData) { TablesTemplate += " LEFT OUTER JOIN ".OnlyWhen(temp != null) + $"{medaData.Schema.WithSuffix(".")}{medaData.TableName} AS {{0}}{medaData.TableAlias} " + $"ON {{0}}{medaData.TableAlias}.{medaData.IdColumnName} = {{0}}{temp?.TableAlias}.{temp?.IdColumnName}".OnlyWhen(temp != null); temp = medaData; } foreach (var parent in MetaData.BaseClassesInOrder) { addTable(parent); } addTable(MetaData); foreach (var drived in MetaData.DrivedClasses) { addTable(drived); } }
public virtual string GenerateUpdateCommand(DataProviderMetaData metaData) { var properties = metaData.UserDefienedProperties .Except(p => p.IsAutoNumber); return($@"UPDATE {GetFullTablaName(metaData)} SET {properties.Select(x => $"{SafeId(x.Name)} = @{x.ParameterName}").ToString(", ")} OUTPUT INSERTED.{metaData.IdColumnName} WHERE {metaData.IdColumnName} = @OriginalId"); }
public virtual string GenerateInsertCommand(DataProviderMetaData metaData) { var properties = metaData.UserDefienedAndIdProperties .Except(p => p.IsAutoNumber); if (metaData.IsSoftDeleteEnabled) { properties = properties.Concat(metaData.Properties.First(p => p.IsDeleted)); } var autoNumber = metaData.Properties.FirstOrDefault(x => x.IsAutoNumber); return($@"INSERT INTO {GetFullTablaName(metaData)} ({properties.Select(x => SafeId(x.Name)).ToString(", ")}) {$"OUTPUT [INSERTED].{autoNumber?.Name}".OnlyWhen(autoNumber != null)} VALUES ({properties.Select(x => $"@{x.ParameterName}").ToString(", ")})"); }
string GetFullTablaName(DataProviderMetaData metaData) => metaData.Schema.WithSuffix(".") + metaData.TableName;
public virtual string GenerateDeleteCommand(DataProviderMetaData metaData) => $"DELETE FROM {GetFullTablaName(metaData)} WHERE {metaData.IdColumnName} = @Id";
string GetSqlCommandColumnAlias(DataProviderMetaData medaData, string propertyName) => $"{medaData.TableName}_{propertyName}";
string GetSqlCommandColumnAlias(DataProviderMetaData medaData, PropertyData property) => GetSqlCommandColumnAlias(medaData, property.Name);
string GetSqlCommandColumn(DataProviderMetaData medaData, string propertyName) => $"{medaData.TableAlias}.[{propertyName}]";