Пример #1
0
        /// <summary>
        /// 创建Command并绑定参数
        /// </summary>
        public virtual DbCommand CreateCommand(string sql, Expression <Func <EntityType, bool> > predicate)
        {
            AddFragment(sql);
            Visit(predicate);
            var command = Database.GetSqlStringCommand(Sql);

            foreach (var p in Parameters)
            {
                Database.AddInParameter(command, p.Name, DbTypeParser.Parse(p.Type), p.Value);
            }
            return(command);
        }
Пример #2
0
        /// <summary>
        /// Verifies the specified control.
        /// </summary>
        /// <param name="control">The control.</param>
        /// <returns></returns>
        public IEnumerable <string> Verify(xControl control)
        {
            var verificationResults = new List <string>();
            var dbColumnLength      = DbTypeParser.GetColumnLength(control.DBType);
            var maxLength           = control.MaxLength;

            if (dbColumnLength < maxLength)
            {
                verificationResults.Add(string.Format("{0}: Database column length is lesser than the value specified in MaxLength attribute. {1}",
                                                      control.Caption, Environment.NewLine));
            }

            return(verificationResults);
        }
Пример #3
0
        /// <summary>
        /// Generates the default value test case.
        /// </summary>
        /// <param name="control">The control.</param>
        /// <returns></returns>
        private TestCaseComponent GenerateDefaultValueTestCase(xControl control)
        {
            if (!string.IsNullOrEmpty(control.Value) || control.PrimaryKey)
            {
                return(null);
            }

            var length    = Math.Min(DbTypeParser.GetColumnLength(control.DBType), control.MaxLength);
            var testValue = RandomValueHelper.GenerateRandomString(length);

            return(new TestCaseComponent
            {
                Name = $"{control.Name}_Default",
                Type = TestCaseType.DEFAULT,
                TestCaseSetter = string.Format("SetTextbox(\"{0}\", \"{1}\");", control.Name, testValue),
                TestCaseDBValidator = string.Format("Assert_Data(\"{0}\", \"{1}\");", control.Name, testValue),
                TestCaseEditModeValidator = string.Format("AssertTextbox(\"{0}\", \"{1}\");", control.Name, testValue),
                TestCaseViewModeValidator = string.Format("AssertTextbox(\"{0}\", \"{1}\");", control.Name, testValue),
                Description = string.Empty,
                WillSaveSucceed = true
            });
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="member"></param>
        public ReflectionMemberDescriptor(MemberInfo member)
        {
            if (member == null)
            {
                throw new ArgumentNullException(nameof(member));
            }
            Member = member;

            var type = member.MemberType == MemberTypes.Field
                ? ((FieldInfo)member).FieldType
                : member.MemberType == MemberTypes.Property
                ? ((PropertyInfo)member).PropertyType
                : null;

            if (type == null)
            {
                throw new NotSupportedException("invalid member type :" + member.MemberType);
            }
            Type        = type;
            Name        = member.Name;
            DbType      = DbTypeParser.Parse(Type);
            DbGenerated = false;
        }
Пример #5
0
        public void ParseNumber()
        {
            var result = DbTypeParser.GetColumnLength("varchar(10)");

            Assert.AreEqual(10, result);
        }
Пример #6
0
        public void ParseString()
        {
            var result = DbTypeParser.GetColumnLength("varchar(max)");

            Assert.AreEqual(4000, result);
        }
Пример #7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="descriptor"></param>
        /// <returns></returns>
        public Action <IDatabase, TEntity, Expression <Func <TEntity, bool> > > Create(EntityDescriptor descriptor)
        {
            var sets    = AttributeDescriptorFactory.Create <TSet>().Members.Select(_ => _.Member.Name).ToArray();
            var members = descriptor.Members.Where(_ => sets.Contains(_.Member.Name)).Select((_, i) =>
                                                                                             new MemberTuple <TEntity>(
                                                                                                 _.Name,
                                                                                                 _.DbType,
                                                                                                 buildParameter("p_set_" + i),
                                                                                                 MemberAccessor <TEntity, object> .GetGetter(_.Member)
                                                                                                 )).ToArray();

            if (members.Length == 0)
            {
                throw new InvalidOperationException("未设置更新列集合");
            }

            if (quote != null)
            {
                var sql = new StringBuilder("UPDATE ")
                          .Append(string.IsNullOrEmpty(descriptor.Schema) ? null : (quote(descriptor.Schema) + '.'))
                          .AppendLine(quote(descriptor.Name))
                          .Append(" SET ")
                          .AppendJoin(", ", members.Select(_ => quote(_.Name) + " = " + _.ParameterName))
                          .AppendLine()
                          .Append(" WHERE ").ToString();

                return((db, entity, predicate) =>
                {
                    if (entity == null)
                    {
                        throw new ArgumentNullException(nameof(entity));
                    }
                    if (predicate == null)
                    {
                        throw new ArgumentNullException(nameof(predicate));
                    }

                    var visitor = visitorProvider(db);
                    visitor.AddFragment(sql);
                    visitor.Visit(predicate);
                    using (var command = db.GetSqlStringCommand(visitor.Sql))
                    {
                        foreach (var member in members)
                        {
                            db.AddInParameter(command, member.ParameterName, member.DbType, member.Getter(entity));
                        }
                        foreach (var p in visitor.Parameters)
                        {
                            db.AddInParameter(command, p.Name, DbTypeParser.Parse(p.Type), p.Value);
                        }
                        db.ExecuteNonQuery(command);
                    }
                });
            }
            return((db, entity, predicate) =>
            {
                if (entity == null)
                {
                    throw new ArgumentNullException(nameof(entity));
                }
                if (predicate == null)
                {
                    throw new ArgumentNullException(nameof(predicate));
                }

                var sql = new StringBuilder("UPDATE ")
                          .Append(string.IsNullOrEmpty(descriptor.Schema) ? null : (db.QuoteName(descriptor.Schema) + '.'))
                          .AppendLine(db.QuoteName(descriptor.Name))
                          .Append(" SET ")
                          .AppendJoin(", ", members.Select(_ => db.QuoteName(_.Name) + " = " + db.BuildParameterName(_.ParameterName)))
                          .AppendLine()
                          .Append(" WHERE ").ToString();

                var visitor = visitorProvider(db);
                visitor.AddFragment(sql);
                visitor.Visit(predicate);
                using (var command = db.GetSqlStringCommand(visitor.Sql))
                {
                    foreach (var member in members)
                    {
                        db.AddInParameter(command, member.ParameterName, member.DbType, member.Getter(entity));
                    }
                    foreach (var p in visitor.Parameters)
                    {
                        db.AddInParameter(command, p.Name, DbTypeParser.Parse(p.Type), p.Value);
                    }
                    db.ExecuteNonQuery(command);
                }
            });
        }