コード例 #1
0
        /// <summary>
        /// 计算要插入、更新或删除的已修改对象的集,并执行相应命令以实现对数据库的更改
        /// </summary>
        /// <returns></returns>
        public override async Task <int> SubmitChangesAsync()
        {
            int rowCount = _dbQueryables.Count;

            if (rowCount == 0)
            {
                return(0);
            }

            List <Command> sqlList   = this.Provider.Resolve(_dbQueryables);
            List <int>     identitys = new List <int>();
            IDataReader    reader    = null;

            try
            {
                Func <IDbCommand, Task <object> > func = async cmd =>
                {
                    reader = await base.Database.ExecuteReaderAsync(cmd);

                    TypeDeserializer deserializer = new TypeDeserializer(this.Database, reader, null);
                    do
                    {
                        var result = deserializer.Deserialize <int>();
                        foreach (IDbDataParameter p in cmd.Parameters)
                        {
                            if (p.Direction != ParameterDirection.Output)
                            {
                                continue;
                            }
                            identitys.Add(Convert.ToInt32(p.Value));
                        }
                    }while (reader.NextResult());

                    // 释放当前的reader
                    if (reader != null)
                    {
                        reader.Dispose();
                    }

                    return(null);
                };

                await this.Database.ExecuteAsync <object>(sqlList, func);

                this.SetAutoIncrementValue(_dbQueryables, identitys);
                return(rowCount);
            }
            finally
            {
                if (reader != null)
                {
                    reader.Dispose();
                }
                this.InternalDispose();
            }
        }
コード例 #2
0
        private void AssertSignature(string sExp, params Argument_v1[] args)
        {
            var arch   = new MipsBe32Architecture();
            var tser   = new TypeDeserializer();
            var mipsps = new MipsProcedureSerializer(arch, tser, null);
            var sig    = mipsps.Deserialize(new SerializedSignature
            {
                Arguments = args
            },
                                            arch.CreateFrame());
            var sArgs = string.Join(", ", sig.Parameters.Select(p => RenderArg(p.Storage)));

            Assert.AreEqual(sExp.Trim(), sArgs);
        }
コード例 #3
0
        /// <summary>
        /// 计算要插入、更新或删除的已修改对象的集,并执行相应命令以实现对数据库的更改
        /// </summary>
        /// <returns></returns>
        public override int SubmitChanges()
        {
            int rowCount = _dbQueryables.Count;

            if (rowCount == 0)
            {
                return(0);
            }

            IDataReader    reader    = null;
            List <int>     identitys = null;
            List <Command> sqlList   = this.Provider.Resolve(_dbQueryables);

            Func <IDbCommand, object> doExecute = cmd =>
            {
                reader = this.Database.ExecuteReader(cmd);
                TypeDeserializer deserializer = new TypeDeserializer(this.Database, reader, null);
                do
                {
                    List <int> autoIncrements = null;
                    deserializer.Deserialize <object>(out autoIncrements);

                    if (cmd.Parameters != null)
                    {
                        foreach (IDbDataParameter p in cmd.Parameters)
                        {
                            if (p.Direction != ParameterDirection.Output)
                            {
                                continue;
                            }
                            if (identitys == null)
                            {
                                identitys = new List <int>();
                            }
                            identitys.Add(Convert.ToInt32(p.Value));
                        }
                    }
                }while (reader.NextResult());

                // 释放当前的reader
                if (reader != null)
                {
                    reader.Dispose();
                }

                return(null);
            };

            try
            {
                this.Database.Execute <object>(sqlList, doExecute);
                this.SetAutoIncrementValue(_dbQueryables, identitys);
                return(rowCount);
            }
            finally
            {
                if (reader != null)
                {
                    reader.Dispose();
                }
                this.InternalDispose();
            }
        }
コード例 #4
0
        /// <summary>
        /// 计算要插入、更新或删除的已修改对象的集,并执行相应命令以实现对数据库的更改
        /// </summary>
        /// <typeparam name="T1">T</typeparam>
        /// <typeparam name="T2">T</typeparam>
        /// <param name="result1">提交更改并查询数据</param>
        /// <returns></returns>
        public override int SubmitChanges <T1, T2>(out List <T1> result1, out List <T2> result2)
        {
            result1 = new List <T1>();
            result2 = new List <T2>();
            int rowCount = _dbQueryables.Count;

            if (rowCount == 0)
            {
                return(0);
            }

            List <T1>      q1        = null;
            List <T2>      q2        = null;
            IDataReader    reader    = null;
            List <int>     identitys = null;
            List <Command> sqlList   = this.Provider.Resolve(_dbQueryables);
            List <IMapper> maps      = sqlList.ToList(x => x as IMapper, x => x is IMapper);

            Func <IDbCommand, object> doExecute = cmd =>
            {
                reader = this.Database.ExecuteReader(cmd);
                TypeDeserializer deserializer1 = null;
                TypeDeserializer deserializer2 = null;
                do
                {
                    if (q1 == null)
                    {
                        // 先查第一个类型集合
                        List <int> autoIncrements = null;
                        if (deserializer1 == null)
                        {
                            deserializer1 = new TypeDeserializer(this.Database, reader, maps.Count > 0 ? maps[0] : null);
                        }
                        var collection = deserializer1.Deserialize <T1>(out autoIncrements);

                        if (collection != null)
                        {
                            q1 = collection;
                        }

                        if (cmd.Parameters != null)
                        {
                            foreach (IDbDataParameter p in cmd.Parameters)
                            {
                                if (identitys == null)
                                {
                                    identitys = new List <int>();
                                }
                                if (p.Direction != ParameterDirection.Output)
                                {
                                    continue;
                                }
                                identitys.Add(Convert.ToInt32(p.Value));
                            }
                        }
                    }
                    else
                    {
                        // 再查第二个类型集合
                        List <int> autoIncrements = null;
                        if (deserializer2 == null)
                        {
                            deserializer2 = new TypeDeserializer(this.Database, reader, maps.Count > 1 ? maps[1] : null);
                        }
                        var collection = deserializer2.Deserialize <T2>(out autoIncrements);

                        if (collection != null)
                        {
                            if (q2 == null)
                            {
                                q2 = collection;
                            }
                        }

                        if (cmd.Parameters != null)
                        {
                            foreach (IDbDataParameter p in cmd.Parameters)
                            {
                                if (identitys == null)
                                {
                                    identitys = new List <int>();
                                }
                                if (p.Direction != ParameterDirection.Output)
                                {
                                    continue;
                                }
                                identitys.Add(Convert.ToInt32(p.Value));
                            }
                        }
                    }
                }while (reader.NextResult());

                // 释放当前的reader
                if (reader != null)
                {
                    reader.Dispose();
                }
                return(null);
            };

            try
            {
                this.Database.Execute <object>(sqlList, doExecute);
                result1 = q1 ?? new List <T1>(0);
                result2 = q2 ?? new List <T2>(0);
                this.SetAutoIncrementValue(_dbQueryables, identitys);
                return(rowCount);
            }
            finally
            {
                if (reader != null)
                {
                    reader.Dispose();
                }
                this.InternalDispose();
            }
        }