Exemplo n.º 1
0
        /// <summary>
        /// 包含(用于仅更新)
        /// </summary>
        /// <typeparam name="TInclude"></typeparam>
        /// <returns></returns>
        internal static Func <MemberDescriptor, bool> Include <TInclude>() where TInclude : class
        {
            var excludeMembers = new HashSet <string>(AttributeDescriptorFactory.Create <TInclude>().Members
                                                      .Select(_ => _.Member.Name));

            return(_ => excludeMembers.Contains(_.Member.Name));
        }
 public OracleExpressionVisitor(IDatabase database)
     : base(database, AttributeDescriptorFactory.Create <TEntity>())
 {
 }
Exemplo n.º 3
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="database"></param>
 public SqlExpressionVisitor(IDatabase database) : this(database, AttributeDescriptorFactory.Create <EntityType>())
 {
 }
Exemplo n.º 4
0
 /// <summary>
 ///
 /// </summary>
 public EntityResultMapper()
     : this(AttributeDescriptorFactory.Create <TEntity>())
 {
 }
Exemplo n.º 5
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);
                }
            });
        }