コード例 #1
0
ファイル: RowPersister.cs プロジェクト: 15831944/NFramework
        /// <summary>
        /// DataSource로부터 새로운 Persistent object를 빌드합니다.
        /// </summary>
        /// <param name="dataRow">데이타 소스</param>
        /// <returns>Persistent object</returns>
        public override TPersistent Persist(DataRow dataRow)
        {
            dataRow.ShouldNotBeNull("dataRow");

            if (IsDebugEnabled)
            {
                log.Debug("Build Persistent object of Type [{0}] from DataRow... Name Mapping method=[{1}]",
                          typeof(TPersistent).FullName, NameMapper.GetType().FullName);
            }

            var persistent = FactoryFunction();

            foreach (DataColumn col in dataRow.Table.Columns)
            {
                var propertyName = NameMapper.MapToPropertyName(col.ColumnName);

                if (propertyName.IsNotWhiteSpace())
                {
                    if (IsDebugEnabled)
                    {
                        log.Debug("속성명 [{0}]에 DataRow의 컬럼명 [{1}]의 값 [{2}]를 설정합니다...", propertyName, col.ColumnName, dataRow[col]);
                    }

                    DynamicAccessor.SetPropertyValue(persistent, propertyName, dataRow[col]);
                }
            }

            return(persistent);
        }
コード例 #2
0
        /// <summary>
        /// DataSource로부터 새로운 Persistent object를 빌드합니다.
        /// </summary>
        /// <param name="dataReader">데이타 소스</param>
        /// <returns>Persistent object</returns>
        public override T Persist(IDataReader dataReader)
        {
            dataReader.ShouldNotBeNull("dataReader");

            if (IsDebugEnabled)
            {
                log.Debug("Build Persistent object of Type [{0}] from IDataReader... Name Mapping method=[{1}]",
                          typeof(T).FullName, NameMapper.GetType().FullName);
            }

            var persistent  = FactoryFunction();
            var columnNames = Enumerable.Range(0, dataReader.FieldCount).Select <int, string>(dataReader.GetName).ToArray();

            foreach (var columnName in columnNames)
            {
                var propertyName = NameMapper.MapToPropertyName(columnName);

                if (propertyName.IsNotWhiteSpace())
                {
                    var columnValue = dataReader.AsValue(columnName);

                    if (IsDebugEnabled)
                    {
                        log.Debug("속성명 [{0}]에 DataReader 컬럼명 [{1}]의 값 [{2}]를 설정합니다...", propertyName, columnName, columnValue);
                    }

                    DynamicAccessor.SetPropertyValue(persistent, propertyName, columnValue);
                }
            }
            return(persistent);
        }
コード例 #3
0
        /// <summary>
        /// Create an entry manager
        /// </summary>
        protected virtual IChangeTrackingEntryManager CreateEntryManager(Type type)
        {
            var             trackedAccessors = new List <DynamicAccessor>();
            DynamicAccessor keyAccessor      = null;

            foreach (var property in type.GetProperties())
            {
                if (property.IsDefined(typeof(IgnoreChangesAttribute)))
                {
                    continue;
                }

                var dynamicProp = property.CreateDynamicProperty();
                trackedAccessors.Add(dynamicProp);

                if (property.IsDefined(typeof(ChangeTrackingKeyAttribute)) == false)
                {
                    continue;
                }

                if (keyAccessor != null)
                {
                    throw new InvalidOperationException("Multiple change tracking keys are set for this type of entity you have to choose only one");
                }
                keyAccessor = dynamicProp;
            }

            if (keyAccessor == null)
            {
                throw new InvalidOperationException("You have to select a key for change tracking");
            }

            var snapshotFactory = CreateSnapshotFactory(type, trackedAccessors);

            return(new ChangeTrackingEntryManager(snapshotFactory, keyAccessor));
        }
コード例 #4
0
ファイル: TrackedValue.cs プロジェクト: dotlogix/DotlogixCore
 /// <summary>
 /// Revert changes
 /// </summary>
 public void RevertChanges()
 {
     DynamicAccessor.SetValue(Target, OldValue);
 }
コード例 #5
0
ファイル: TrackedValue.cs プロジェクト: dotlogix/DotlogixCore
 /// <summary>
 /// Creates a new instance of <see cref="TrackedValue"/>
 /// </summary>
 public TrackedValue(object target, DynamicAccessor dynamicAccessor)
 {
     Target          = target;
     DynamicAccessor = dynamicAccessor;
     OldValue        = dynamicAccessor.GetValue(target);
 }
コード例 #6
0
 /// <inheritdoc />
 public DynamicValueGetter(DynamicAccessor accessor) : base(s => (TValue)accessor.GetValue(s))
 {
 }
コード例 #7
0
 /// <inheritdoc />
 public DynamicValueSetter(DynamicAccessor accessor) : base((t, v) => accessor.SetValue(t, v))
 {
 }
コード例 #8
0
 /// <summary>
 /// Creates a new instance of <see cref="ChangeTrackingEntryManager"/>
 /// </summary>
 public ChangeTrackingEntryManager(ISnapshotFactory snapshotFactory, DynamicAccessor keyAccessors)
 {
     _snapshotFactory = snapshotFactory;
     _keyAccessors    = keyAccessors;
 }