mirror of
				https://github.com/nsnail/FreeSql.git
				synced 2025-11-04 17:20:49 +08:00 
			
		
		
		
	完善 CodeFirst
This commit is contained in:
		@@ -26,7 +26,8 @@ namespace FreeSql.Internal.CommonProvider {
 | 
			
		||||
					switch (expCall.Method.Name) {
 | 
			
		||||
						case "Where": this.InternalWhere(expCall.Arguments[0]); break;
 | 
			
		||||
						case "WhereIf":
 | 
			
		||||
							if (_commonExpression.ExpressionSelectColumn_MemberAccess(null, null, SelectTableInfoType.From, expCall.Arguments[0], false) == "1")
 | 
			
		||||
							var whereIfCond = _commonExpression.ExpressionSelectColumn_MemberAccess(null, null, SelectTableInfoType.From, expCall.Arguments[0], false);
 | 
			
		||||
							if (whereIfCond == "1" || whereIfCond == "'t'")
 | 
			
		||||
								this.InternalWhere(expCall.Arguments[1]);
 | 
			
		||||
							break;
 | 
			
		||||
						case "GroupBy": this.InternalGroupBy(expCall.Arguments[0]); break;
 | 
			
		||||
 
 | 
			
		||||
@@ -66,7 +66,7 @@ namespace FreeSql.Internal.CommonProvider {
 | 
			
		||||
			if (cols.Any() == false) return this;
 | 
			
		||||
			foreach (var col in cols) {
 | 
			
		||||
				if (col.Column.Attribute.IsNullable) {
 | 
			
		||||
					var replval = col.Column.Attribute.DbDefautValue;
 | 
			
		||||
					var replval = _orm.CodeFirst.GetDbInfo(col.Column.CsType.GenericTypeArguments.FirstOrDefault())?.defaultValue;
 | 
			
		||||
					if (replval == null) continue;
 | 
			
		||||
					var replname = _commonUtils.QuoteSqlName(col.Column.Attribute.Name);
 | 
			
		||||
					expt = expt.Replace(replname, _commonUtils.IsNull(replname, _commonUtils.FormatSql("{0}", replval)));
 | 
			
		||||
 
 | 
			
		||||
@@ -22,8 +22,12 @@ namespace FreeSql.Internal {
 | 
			
		||||
			trytb.Type = entity;
 | 
			
		||||
			trytb.Properties = entity.GetProperties().ToDictionary(a => a.Name, a => a, StringComparer.CurrentCultureIgnoreCase);
 | 
			
		||||
			trytb.CsName = entity.Name;
 | 
			
		||||
			trytb.DbName = tbattr?.Name ?? entity.Name;
 | 
			
		||||
			trytb.DbName = (tbattr?.Name ?? entity.Name);
 | 
			
		||||
			trytb.DbOldName = tbattr?.OldName;
 | 
			
		||||
			if (common.CodeFirst.IsSyncStructureToLower) {
 | 
			
		||||
				trytb.DbName = trytb.DbName.ToLower();
 | 
			
		||||
				trytb.DbOldName = trytb.DbOldName?.ToLower();
 | 
			
		||||
			}
 | 
			
		||||
			trytb.SelectFilter = tbattr?.SelectFilter;
 | 
			
		||||
			foreach (var p in trytb.Properties.Values) {
 | 
			
		||||
				var tp = common.CodeFirst.GetDbInfo(p.PropertyType);
 | 
			
		||||
@@ -38,22 +42,23 @@ namespace FreeSql.Internal {
 | 
			
		||||
						IsNullable = tp.Value.isnullable ?? true,
 | 
			
		||||
						IsPrimary = false,
 | 
			
		||||
					};
 | 
			
		||||
				if (string.IsNullOrEmpty(colattr.DbType) == false) colattr.DbType = colattr.DbType.ToUpper();
 | 
			
		||||
				if (tp != null && tp.Value.isnullable == null) colattr.IsNullable = tp.Value.dbtypeFull.Contains("NOT NULL") == false;
 | 
			
		||||
				if (string.IsNullOrEmpty(colattr.DbType) == false) colattr.IsNullable = colattr.DbType.Contains("NOT NULL") == false;
 | 
			
		||||
				if (string.IsNullOrEmpty(colattr.Name)) colattr.Name = p.Name;
 | 
			
		||||
				if (string.IsNullOrEmpty(colattr.DbType)) colattr.DbType = tp?.dbtypeFull ?? "varchar(255)";
 | 
			
		||||
				colattr.DbType = colattr.DbType.ToUpper();
 | 
			
		||||
 | 
			
		||||
				if (tp != null && tp.Value.isnullable == null) colattr.IsNullable = tp.Value.dbtypeFull.Contains("NOT NULL") == false;
 | 
			
		||||
				if (colattr.DbType?.Contains("NOT NULL") == true) colattr.IsNullable = false;
 | 
			
		||||
				if (string.IsNullOrEmpty(colattr.Name)) colattr.Name = p.Name;
 | 
			
		||||
				if (common.CodeFirst.IsSyncStructureToLower) colattr.Name = colattr.Name.ToLower();
 | 
			
		||||
				
 | 
			
		||||
				if ((colattr.IsNullable == false || colattr.IsIdentity || colattr.IsPrimary) && colattr.DbType.Contains("NOT NULL") == false) colattr.DbType += " NOT NULL";
 | 
			
		||||
				if (colattr.IsNullable == true && colattr.DbType.Contains("NOT NULL")) colattr.DbType = colattr.DbType.Replace("NOT NULL", "");
 | 
			
		||||
				colattr.DbType = Regex.Replace(colattr.DbType, @"\([^\)]+\)", m => Regex.Replace(m.Groups[0].Value, @"\s", ""));
 | 
			
		||||
				colattr.DbDefautValue = trytb.Properties[p.Name].GetValue(Activator.CreateInstance(trytb.Type));
 | 
			
		||||
				if (colattr.DbDefautValue == null && p.PropertyType.FullName == "System.String") colattr.DbDefautValue = string.Empty;
 | 
			
		||||
				if (colattr.DbDefautValue == null) {
 | 
			
		||||
				if (colattr.DbDefautValue == null) colattr.DbDefautValue = tp?.defaultValue;
 | 
			
		||||
				if (colattr.IsNullable == false && colattr.DbDefautValue == null) {
 | 
			
		||||
					var consturctorType = p.PropertyType.GenericTypeArguments.FirstOrDefault() ?? p.PropertyType;
 | 
			
		||||
					if (consturctorType.GetConstructor(new Type[0]) != null) colattr.DbDefautValue = Activator.CreateInstance(consturctorType);
 | 
			
		||||
					colattr.DbDefautValue = Activator.CreateInstance(consturctorType);
 | 
			
		||||
				}
 | 
			
		||||
				if (colattr.DbDefautValue == null) colattr.DbDefautValue = "";
 | 
			
		||||
				if (colattr.DbDefautValue.GetType().FullName == "System.DateTime") colattr.DbDefautValue = new DateTime(1970, 1, 1);
 | 
			
		||||
 | 
			
		||||
				var col = new ColumnInfo {
 | 
			
		||||
					Table = trytb,
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user