예제 #1
0
파일: ObjectDAO.cs 프로젝트: danjiewu/MyOrm
        /// <summary>
        /// 更新或添加对象,若存在则更新,若不存在则添加
        /// </summary>
        /// <param name="t">待更新或添加的对象</param>
        /// <returns>指示更新还是添加</returns>
        public UpdateOrInsertResult UpdateOrInsert(T t)
        {
            if (t == null)
            {
                throw new ArgumentNullException("t");
            }
            foreach (IDataParameter param in UpdateOrInsertCommand.Parameters)
            {
                ColumnDefinition column = TableDefinition.GetColumn(ToNativeName(param.ParameterName));
                param.Value = ConvertToDBValue(column.GetValue(t), column);
            }
            int ret = Convert.ToInt32(UpdateOrInsertCommand.ExecuteScalar());

            if (ret >= 0)
            {
                if (IdentityColumn != null)
                {
                    IdentityColumn.SetValue(t, ret);
                }
                return(UpdateOrInsertResult.Inserted);
            }
            else
            {
                return(UpdateOrInsertResult.Updated);
            }
        }
예제 #2
0
파일: ObjectDAO.cs 프로젝트: danjiewu/MyOrm
 /// <summary>
 /// 将对象添加到数据库
 /// </summary>
 /// <param name="t">待添加的对象</param>
 /// <returns>是否成功添加</returns>
 public virtual bool Insert(T t)
 {
     if (t == null)
     {
         throw new ArgumentNullException("t");
     }
     foreach (IDataParameter param in InsertCommand.Parameters)
     {
         ColumnDefinition column = TableDefinition.GetColumn(ToNativeName(param.ParameterName));
         param.Value = ConvertToDBValue(column.GetValue(t), column);
     }
     if (IdentityColumn == null)
     {
         InsertCommand.ExecuteNonQuery();
     }
     else
     {
         IDataParameter param = InsertCommand.Parameters.Contains(ToParamName(IdentityColumn.PropertyName)) ? (IDataParameter)InsertCommand.Parameters[ToParamName(IdentityColumn.PropertyName)] : null;
         if (param != null && param.Direction == ParameterDirection.Output)
         {
             InsertCommand.ExecuteNonQuery();
             IdentityColumn.SetValue(t, ConvertValue(param.Value, IdentityColumn.PropertyType));
         }
         else
         {
             IdentityColumn.SetValue(t, ConvertValue(InsertCommand.ExecuteScalar(), IdentityColumn.PropertyType));
         }
     }
     return(true);
 }
예제 #3
0
        public void CreateIdentityColumn(
            Dictionary <string, UserTable> userTables,
            IDataRecord reader)
        {
            var schemaName = Convert.ToString(reader[SchemaNameOrdinal]);
            var tableName  = Convert.ToString(reader[TableNameOrdinal]);

            var userTableNamespaceBuilder = new StringBuilder(schemaName.Length + tableName.Length + 1);

            userTableNamespaceBuilder.Append(schemaName).
            Append(Constants.Dot).
            Append(tableName);

            var userTableNamespace = userTableNamespaceBuilder.ToString();

            if (!userTables.ContainsKey(userTableNamespace))
            {
                return;
            }

            var userTable = userTables[userTableNamespace];

            if (userTable == null)
            {
                return;
            }

            var identityColumn = new IdentityColumn
            {
                UserTable           = userTable,
                ObjectName          = Convert.ToString(reader[ObjectNameOrdinal]),
                SeedValue           = Convert.ToInt32(reader[SeedValueOrdinal]),
                IncrementValue      = Convert.ToInt32(reader[IncrementValueOrdinal]),
                IsNotForReplication = Convert.ToBoolean(reader[IsNotForReplicationOrdinal])
            };

            userTable.IdentityColumns.Add(identityColumn);
        }