예제 #1
0
        /// <summary>
        /// This method is used by SetValue or by outside
        /// </summary>
        /// <param name="fieldName"></param>
        /// <param name="value"></param>
        /// <param name="clean"></param>
        internal void SetValueWithFlag(string fieldName, object value, bool clean)
        {
            if (!_metadata.ContainsField(fieldName))
            {
                throw new ArgumentException("The field name does not exist", "fieldName");
            }
            string lowerName = fieldName.ToLower();
            Type   destType  = DataTypeConvert.ToSysType(_metadata[fieldName].DataType, _metadata[fieldName].Nullable);

            value = TypeConvert.ChangeType(value, destType);
            object oldValue = null;

            _fieldValues.TryGetValue(lowerName, out oldValue);
            bool changed = oldValue != value;

            if (changed)
            {
                if (clean)
                {
                    _fieldValues[lowerName] = value;
                }
                else
                {
                    _dirtyValues[lowerName] = value;
                    ReportFieldChanged(fieldName, value);
                }
            }
        }
예제 #2
0
        protected IEnumerable <string> GenerateUpdateScripts(IExtDataRecord dataRow, EntityMetadata rowMetaData, IEnumerable <string> dirtyFields)
        {
            List <string> scripts           = new List <string>();
            List <string> preDefDirtyFields = new List <string>();
            List <string> extDirtyFields    = new List <string>();

            foreach (string dirtyField in dirtyFields)
            {
                if (!rowMetaData.ContainsField(dirtyField))
                {
                    continue;
                }
                if (!rowMetaData[dirtyField].IsExtension)
                {
                    preDefDirtyFields.Add(dirtyField);
                }
                else
                {
                    extDirtyFields.Add(dirtyField);
                }
            }
            //update predefined fields
            if (preDefDirtyFields.Count > 0)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("UPDATE ").Append(rowMetaData.SourceName).Append(" SET ");
                for (int i = 0; i < preDefDirtyFields.Count; i++)
                {
                    sb.Append(preDefDirtyFields[i]).Append(" = ").
                    Append(SqlFormat.ToSqlValueString(dataRow.GetValue(preDefDirtyFields[i])));
                    if (i != preDefDirtyFields.Count - 1)
                    {
                        sb.Append(", ");
                    }
                }
                sb.Append(" WHERE ").Append(GetConditionClause(dataRow, rowMetaData.KeyFieldNames));
                scripts.Add(sb.ToString());
            }

            //uppdate extension values
            if (extDirtyFields.Count > 0)
            {
                string recordIdStringValue = SqlFormat.ToSqlValueString(dataRow.GetValue(rowMetaData.Key));
                string extensionTable      = string.IsNullOrEmpty(rowMetaData.ExtensionTable) ? Consts.DefExtensionTable : rowMetaData.ExtensionTable;
                foreach (string extFieldName in extDirtyFields)
                {
                    object value = dataRow.GetValue(extFieldName);
                    value = TypeConvert.ChangeType <string>(value);
                    StringBuilder sb = new StringBuilder();
                    sb.Append("DELETE FROM ").Append(extensionTable).
                    Append(" WHERE RecordId=").Append(recordIdStringValue).
                    Append(" AND FieldId=").Append(SqlFormat.ToSqlValueString(rowMetaData[extFieldName].Id));
                    scripts.Add(sb.ToString());
                    sb = new StringBuilder();
                    sb.Append("INSERT INTO ").Append(extensionTable).
                    Append("(RecordId, FieldId, Value ) VALUES (").Append(recordIdStringValue).
                    Append(",").Append(SqlFormat.ToSqlValueString(rowMetaData[extFieldName].Id)).
                    Append(",").Append(SqlFormat.ToSqlValueString(value)).Append(")");
                    scripts.Add(sb.ToString());
                }
            }
            //updates extension fields
            return(scripts);
        }