Add Queryable.ToClassString

This commit is contained in:
sunkaixuan
2017-09-29 16:39:25 +08:00
parent 8f7f4bc159
commit eba517a11a
3 changed files with 56 additions and 2 deletions

View File

@@ -206,7 +206,45 @@ namespace SqlSugar
classText = classText.Replace(DbFirstTemplate.KeyPropertyName, null); classText = classText.Replace(DbFirstTemplate.KeyPropertyName, null);
return classText; return classText;
} }
internal string GetClassString(List<DbColumnInfo> columns, ref string className)
{
string classText = this.ClassTemplate;
string ConstructorText = IsDefaultValue ? this.ConstructorTemplate : null;
classText = classText.Replace(DbFirstTemplate.KeyClassName, className);
classText = classText.Replace(DbFirstTemplate.KeyNamespace, this.Namespace);
classText = classText.Replace(DbFirstTemplate.KeyUsing, IsAttribute ? (this.UsingTemplate + "using " + UtilConstants.AssemblyName + ";\r\n") : this.UsingTemplate);
classText = classText.Replace(DbFirstTemplate.KeyClassDescription, this.ClassDescriptionTemplate.Replace(DbFirstTemplate.KeyClassDescription,"\r\n"));
classText = classText.Replace(DbFirstTemplate.KeySugarTable, IsAttribute ? string.Format(DbFirstTemplate.ValueSugarTable, className) : null);
if (columns.IsValuable())
{
foreach (var item in columns)
{
var isLast = columns.Last() == item;
var index = columns.IndexOf(item);
string PropertyText = this.PropertyTemplate;
string PropertyDescriptionText = this.PropertyDescriptionTemplate;
string propertyName = GetPropertyName(item);
string propertyTypeName =item.DataType;
PropertyText = GetPropertyText(item, PropertyText);
PropertyDescriptionText = GetPropertyDescriptionText(item, PropertyDescriptionText);
PropertyText = PropertyDescriptionText + PropertyText;
classText = classText.Replace(DbFirstTemplate.KeyPropertyName, PropertyText + (isLast ? "" : ("\r\n" + DbFirstTemplate.KeyPropertyName)));
if (ConstructorText.IsValuable() && item.DefaultValue != null)
{
var hasDefaultValue = columns.Skip(index + 1).Any(it => it.DefaultValue.IsValuable());
ConstructorText = ConstructorText.Replace(DbFirstTemplate.KeyPropertyName, propertyName);
ConstructorText = ConstructorText.Replace(DbFirstTemplate.KeyDefaultValue, GetPropertyTypeConvert(item)) + (!hasDefaultValue ? "" : this.ConstructorTemplate);
}
}
}
if (!columns.Any(it => it.DefaultValue != null))
{
ConstructorText = null;
}
classText = classText.Replace(DbFirstTemplate.KeyConstructor, ConstructorText);
classText = classText.Replace(DbFirstTemplate.KeyPropertyName, null);
return classText;
}
public void CreateClassFile(string directoryPath, string nameSpace = "Models") public void CreateClassFile(string directoryPath, string nameSpace = "Models")
{ {
Check.ArgumentNullException(directoryPath, "directoryPath can't null"); Check.ArgumentNullException(directoryPath, "directoryPath can't null");

View File

@@ -605,6 +605,21 @@ namespace SqlSugar
} }
return this; return this;
} }
public string ToClassString(string className)
{
List<DbColumnInfo> columns = new List<DbColumnInfo>();
var properties = typeof(T).GetProperties();
foreach (var item in properties)
{
columns.Add(new DbColumnInfo()
{
DbColumnName=item.Name,
DataType=UtilMethods.GetUnderType(item.PropertyType).Name
});
}
var result = ((this.Context.DbFirst) as DbFirstProvider).GetClassString(columns, ref className);
return result;
}
#region Async methods #region Async methods
public Task<T> SingleAsync() public Task<T> SingleAsync()
{ {

View File

@@ -123,6 +123,7 @@ namespace SqlSugar
Task<KeyValuePair<List<T>,int>> ToPageListAsync(int pageIndex, int pageSize, int totalNumber); Task<KeyValuePair<List<T>,int>> ToPageListAsync(int pageIndex, int pageSize, int totalNumber);
ISugarQueryable<T> WithCache(int cacheDurationInSeconds = int.MaxValue); ISugarQueryable<T> WithCache(int cacheDurationInSeconds = int.MaxValue);
ISugarQueryable<T> WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue); ISugarQueryable<T> WithCacheIF(bool isCache, int cacheDurationInSeconds = int.MaxValue);
string ToClassString();
void Clear(); void Clear();
} }
public partial interface ISugarQueryable<T, T2> : ISugarQueryable<T> public partial interface ISugarQueryable<T, T2> : ISugarQueryable<T>