/// <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); }
/// <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); }
/// <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)); }
/// <summary> /// Revert changes /// </summary> public void RevertChanges() { DynamicAccessor.SetValue(Target, OldValue); }
/// <summary> /// Creates a new instance of <see cref="TrackedValue"/> /// </summary> public TrackedValue(object target, DynamicAccessor dynamicAccessor) { Target = target; DynamicAccessor = dynamicAccessor; OldValue = dynamicAccessor.GetValue(target); }
/// <inheritdoc /> public DynamicValueGetter(DynamicAccessor accessor) : base(s => (TValue)accessor.GetValue(s)) { }
/// <inheritdoc /> public DynamicValueSetter(DynamicAccessor accessor) : base((t, v) => accessor.SetValue(t, v)) { }
/// <summary> /// Creates a new instance of <see cref="ChangeTrackingEntryManager"/> /// </summary> public ChangeTrackingEntryManager(ISnapshotFactory snapshotFactory, DynamicAccessor keyAccessors) { _snapshotFactory = snapshotFactory; _keyAccessors = keyAccessors; }