This commit is contained in:
sunkaixuan
2017-06-20 23:14:56 +08:00
10 changed files with 88 additions and 8 deletions

View File

@@ -229,6 +229,13 @@ namespace OrmTest.Demo
.OrderBy((st, sc) => sc.Id, OrderByType.Desc) .OrderBy((st, sc) => sc.Id, OrderByType.Desc)
.Select((st, sc) => new ViewModelStudent { Name = st.Name, SchoolId = sc.Id }).ToList(); .Select((st, sc) => new ViewModelStudent { Name = st.Name, SchoolId = sc.Id }).ToList();
//join 2
var list4_1 = db.Queryable<Student, School>((st, sc) => new object[] {
JoinType.Left,st.SchoolId==sc.Id&& st.Name == "jack"
}).ToList();
//The simple use of Join 2 table //The simple use of Join 2 table
var list5 = db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id).Select((st,sc)=>new {st.Name,st.Id,schoolName=sc.Name}).ToList(); var list5 = db.Queryable<Student, School>((st, sc) => st.SchoolId == sc.Id).Select((st,sc)=>new {st.Name,st.Id,schoolName=sc.Name}).ToList();

View File

@@ -22,6 +22,10 @@ namespace SqlSugar
} }
public void InitTables(Type entityType) public void InitTables(Type entityType)
{ {
if (!this.Context.DbMaintenance.IsAnySystemTablePermissions())
{
Check.Exception(true, "Dbfirst and Codefirst requires system table permissions");
}
Check.Exception(this.Context.IsSystemTablesConfig, "Please set SqlSugarClent Parameter ConnectionConfig.InitKeyType=InitKeyType.Attribute "); Check.Exception(this.Context.IsSystemTablesConfig, "Please set SqlSugarClent Parameter ConnectionConfig.InitKeyType=InitKeyType.Attribute ");
var executeResult = Context.Ado.UseTran(() => var executeResult = Context.Ado.UseTran(() =>
{ {

View File

@@ -39,6 +39,9 @@ namespace SqlSugar
public void Init() public void Init()
{ {
if (!this.Context.DbMaintenance.IsAnySystemTablePermissions()) {
Check.Exception(true, "Dbfirst and Codefirst requires system table permissions");
}
this.TableInfoList =this.Context.RewritableMethods.TranslateCopy(this.Context.DbMaintenance.GetTableInfoList()); this.TableInfoList =this.Context.RewritableMethods.TranslateCopy(this.Context.DbMaintenance.GetTableInfoList());
var viewList = this.Context.RewritableMethods.TranslateCopy(this.Context.DbMaintenance.GetViewInfoList()); var viewList = this.Context.RewritableMethods.TranslateCopy(this.Context.DbMaintenance.GetViewInfoList());
if (viewList.IsValuable()) if (viewList.IsValuable())

View File

@@ -35,14 +35,32 @@ namespace SqlSugar
return GetListOrCache<DbColumnInfo>(key, string.Format(this.GetColumnInfosByTableNameSql, tableName)); return GetListOrCache<DbColumnInfo>(key, string.Format(this.GetColumnInfosByTableNameSql, tableName));
} }
public virtual List<string> GetIsIdentities(string tableName) public virtual List<string> GetIsIdentities(string tableName)
{
string cacheKey = "DbMaintenanceProvider.GetIsIdentities" + tableName.ToLower();
return this.Context.RewritableMethods.GetCacheInstance<List<string>>().Func(cacheKey,
(cm, key) =>
{
return cm[cacheKey];
}, (cm, key) =>
{ {
var result = GetColumnInfosByTableName(tableName).Where(it => it.IsIdentity).ToList(); var result = GetColumnInfosByTableName(tableName).Where(it => it.IsIdentity).ToList();
return result.Select(it => it.DbColumnName).ToList(); return result.Select(it => it.DbColumnName).ToList();
});
} }
public virtual List<string> GetPrimaries(string tableName) public virtual List<string> GetPrimaries(string tableName)
{
string cacheKey = "DbMaintenanceProvider.GetPrimaries" + tableName.ToLower();
return this.Context.RewritableMethods.GetCacheInstance<List<string>>().Func(cacheKey,
(cm, key) =>
{
return cm[cacheKey];
}, (cm, key) =>
{ {
var result = GetColumnInfosByTableName(tableName).Where(it => it.IsPrimarykey).ToList(); var result = GetColumnInfosByTableName(tableName).Where(it => it.IsPrimarykey).ToList();
return result.Select(it => it.DbColumnName).ToList(); return result.Select(it => it.DbColumnName).ToList();
});
} }
#endregion #endregion
@@ -81,6 +99,19 @@ namespace SqlSugar
{ {
return this.Context.Ado.GetInt("select object_id('" + constraintName + "')") > 0; return this.Context.Ado.GetInt("select object_id('" + constraintName + "')") > 0;
} }
public virtual bool IsAnySystemTablePermissions()
{
string sql = this.CheckSystemTablePermissionsSql;
try
{
this.Context.Ado.ExecuteCommand(sql);
return true;
}
catch
{
return false;
}
}
#endregion #endregion
#region DDL #region DDL

View File

@@ -32,6 +32,10 @@ namespace SqlSugar
protected abstract string RenameColumnSql { get; } protected abstract string RenameColumnSql { get; }
#endregion #endregion
#region Check
protected abstract string CheckSystemTablePermissionsSql { get; }
#endregion
#region Scattered #region Scattered
protected abstract string CreateTableNull { get; } protected abstract string CreateTableNull { get; }
protected abstract string CreateTableNotNull { get; } protected abstract string CreateTableNotNull { get; }

View File

@@ -20,6 +20,7 @@ namespace SqlSugar
internal static Type BoolType = typeof(bool); internal static Type BoolType = typeof(bool);
internal static Type ObjType = typeof(object); internal static Type ObjType = typeof(object);
internal static Type DobType = typeof(double); internal static Type DobType = typeof(double);
internal static Type FloatType=typeof(float);
internal static Type ModelType= typeof(ModelContext); internal static Type ModelType= typeof(ModelContext);
internal static Type DicSS = typeof(KeyValuePair<string, string>); internal static Type DicSS = typeof(KeyValuePair<string, string>);
internal static Type DicSi = typeof(KeyValuePair<string, int>); internal static Type DicSi = typeof(KeyValuePair<string, int>);

View File

@@ -55,6 +55,18 @@ namespace SqlSugar
{ {
this.DbType = System.Data.DbType.Double; this.DbType = System.Data.DbType.Double;
} }
else if (type == PubConst.DecType)
{
this.DbType = System.Data.DbType.Decimal;
}
else if (type == PubConst.ByteType)
{
this.DbType = System.Data.DbType.Byte;
}
else if (type == PubConst.FloatType)
{
this.DbType = System.Data.DbType.Single;
}
} }
public SugarParameter(string name, object value, bool isOutput) public SugarParameter(string name, object value, bool isOutput)
{ {

View File

@@ -22,6 +22,7 @@ namespace SqlSugar
bool IsPrimaryKey(string tableName, string column); bool IsPrimaryKey(string tableName, string column);
bool IsIdentity(string tableName, string column); bool IsIdentity(string tableName, string column);
bool IsAnyConstraint(string ConstraintName); bool IsAnyConstraint(string ConstraintName);
bool IsAnySystemTablePermissions();
#endregion #endregion
#region DDL #region DDL

View File

@@ -152,13 +152,25 @@ namespace SqlSugar
return "ALTER TABLE {0} DROP CONSTRAINT {1}"; return "ALTER TABLE {0} DROP CONSTRAINT {1}";
} }
} }
protected override string RenameColumnSql { protected override string RenameColumnSql
get { {
get
{
return "exec sp_rename '{0}.{1}','{2}','column';"; return "exec sp_rename '{0}.{1}','{2}','column';";
} }
} }
#endregion #endregion
#region Check
protected override string CheckSystemTablePermissionsSql
{
get
{
return "select top 1 id from sysobjects";
}
}
#endregion
#region Scattered #region Scattered
protected override string CreateTableNull protected override string CreateTableNull
{ {

View File

@@ -181,8 +181,12 @@ namespace SqlSugar
{ {
this.CreateQueryable<T>(queryable); this.CreateQueryable<T>(queryable);
string shortName = string.Empty; string shortName = string.Empty;
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = this.GetJoinInfos(joinExpression, ref shortName, types); List<SugarParameter> paramters =new List<SugarParameter>();
queryable.SqlBuilder.QueryBuilder.JoinQueryInfos = this.GetJoinInfos(joinExpression,ref paramters, ref shortName, types);
queryable.SqlBuilder.QueryBuilder.TableShortName = shortName; queryable.SqlBuilder.QueryBuilder.TableShortName = shortName;
if (paramters != null) {
queryable.SqlBuilder.QueryBuilder.Parameters.AddRange(paramters);
}
} }
protected void CreateEasyQueryJoin<T>(Expression joinExpression, Type[] types, ISugarQueryable<T> queryable) where T : class, new() protected void CreateEasyQueryJoin<T>(Expression joinExpression, Type[] types, ISugarQueryable<T> queryable) where T : class, new()
{ {
@@ -194,7 +198,7 @@ namespace SqlSugar
#endregion #endregion
#region Private methods #region Private methods
protected List<JoinQueryInfo> GetJoinInfos(Expression joinExpression, ref string shortName, params Type[] entityTypeArray) protected List<JoinQueryInfo> GetJoinInfos(Expression joinExpression,ref List<SugarParameter> parameters, ref string shortName, params Type[] entityTypeArray)
{ {
List<JoinQueryInfo> result = new List<JoinQueryInfo>(); List<JoinQueryInfo> result = new List<JoinQueryInfo>();
var lambdaParameters = ((LambdaExpression)joinExpression).Parameters.ToList(); var lambdaParameters = ((LambdaExpression)joinExpression).Parameters.ToList();
@@ -204,6 +208,7 @@ namespace SqlSugar
expressionContext.Resolve(joinExpression, ResolveExpressType.Join); expressionContext.Resolve(joinExpression, ResolveExpressType.Join);
int i = 0; int i = 0;
var joinArray = expressionContext.Result.GetResultArray(); var joinArray = expressionContext.Result.GetResultArray();
parameters = expressionContext.Parameters;
foreach (var entityType in entityTypeArray) foreach (var entityType in entityTypeArray)
{ {
var isFirst = i == 0; ++i; var isFirst = i == 0; ++i;