Home

BLToolkit.NET

Business Logic Toolkit for .NET www.bltoolkit.net
 

Business Logic Toolkit is a set of components to simplify .NET application development. BLToolkit is provided as source code that you can use "as is" or customize for your applications. It is written in C# and compatible with .NET Framework 2.0, 3.0, and 3.5.

Version 3.1
BLToolkit 3.1   Source code
BLToolkit 3.1 Dev   Full dev version
Current SVN working copy
BLToolkit   SVN checkout source code
BLToolkit Dev   SVN checkout full dev version
Current SVN snapshot
bltoolkit.zip   Source code
bltoolkit_dev.zip   Full dev version
bltoolkit_bin.zip   Binaries

ChangeLog.txt
v 3.2 (working)

Demo (see the dev version of the project)

- Linq.Demo.
- WebServices powered by BLToolkit.
- Partial.Trust demo.

Bug fixes

- Extension assemblies are ignored in TypeFactory.GetType(type).
- Default parameter values were ignored by OverloadAspectBuilder.
- [Parameter(null)] wasn't setting Nullable<> and EditableValue<Nullable<>> values to null
- DefaultTypeBuilder throwing exception if [Parameter(value)] was used on
  EditableValue<Nullable<>> generated properties when Nullable<> did have appropriate
  constructor accepting value type
- DateTimeOffset wasn't handled in DataReaderMapper correctly.

Enhancement

- Linq provider for supported databases.
- PostgreSQL Data Provider added.
- Informix Data Provider added.
- DB2 Data Provider added.
- New SqlIgnore attribute.
- New SqlBuilder class.
- Partial trust support.
- Mapping to/from private classes (FW 3.x only).
- New ParamTypeName attribute for SqlServer2008 table-type parameter support (FW 3.x only).
- EditableArrayList & BindingListImpl implements INotifyCollectionChanged interface.


v 3.1

Bug fixes

- MapValueAttribute ignored for nullable enums.
- MappingSchema.ConvertChangeType does not handle nullable enums properly.
- EditableArrayList indexer add/remove bug.
- ParameterAttribute doesn't work with Nullabe<T> and EditableValue<T>
  when 'T' constructor is not trivial.
- BindingListImpl.AddNew does not fire ListChanged event.
- Some inner types are missing in ObjectMappes, some included w/o reason.
- Setter for ObjectBinder.ItemType fires OnListChanged event before the list changes.
- Convert<To,From> does not handle `Nullable<To>' from scalar `From' case.
- EditableXmlDocument fires PropertyChanged event before an xml node changes.

Enhancement

- CHM help file provided. See the Doc folder.
- New InstanceCache attribute.
- DataAccessor support for IEnumerable<T>.
- Multiple duck. See DuckTyping.Aggregate methods.
- New Overload aspect.
- Own configuration section.
- TypeFactory.GetType() is public now.
- Simplified GenerateAttributeAttribute usage.


v 3.0

Breaking changes

- No more support for .Net 1.1 Framework.

Bug fixes

- EmitHelper.ldc_i4_ emits wrong opcode for numbers from 128 till 255 (bug in msdn)
- Some opcodes were not implemented.
- MappingSchema.MapResultSets fails with NullReferenceException when no data returned.
- Nullable enums were not handled properly.
- BindingList.GetItemSortedPosition() returns wrong index for an item at end of the list.
- Fixed AsyncAspect and other type builders compatibility.
- DbMananger.DiscoverSpParameters fires both OpenConnection and CloseConnection events.

Enhancement

- DateTimeOffset type support.
- MemberAccessor.CloneValue to avoid boxing.
- Named arguments support for GenerateAttributeTypeBuilder.
- Extended support for IsNull & Nullable types in MemberAccessor.
- Support for enum values in EmitHelper.LoadWellKnownValue/LoadInitValue and so on.
- Generic GetValue/SetValue methods for ValueHolders.
- Different projects to support FW 2.0 & FW 3.5.
- LinqMetadataProvider to support Linq To SQL attributes.
- Relocated MetadataProvider's to BLToolkit.Reflection namespace.
- New DbManager ctors to support manual/custom configuration.
- Ability to configure SqlQueryAttribute dynamically.
- Assembly is signed.
- New ActualTypeAttribute to associate DataAccessor's object type and its implementation.
- New AutoImplementInterfaceAttribute to automatically generate interface implementation.
- New TypeAccessor.AssociateType method and TypeAccessor.AssociatedTypeHandler event
  to control interface/type implementation.
- DataException now has the 'Number' property.
- New ClearCache aspect.


v 2.0.7

Bug fixes

- Oracle/Odp does not handle colon (':') in ConvertType.ParameterToName.
- Property change builder will use op_Inequality operation if it is available to compare
  property values.
- DbManager.ExecuteList<T>(params object[]) add an extra typeof(T)
- EditableObject.Clone does reference cloning of its inner objects.
- EditableObject.Clone does not track dirty state of its members.
- Generated assembly name ends with '.dll'.
  As a result, System.Reflection.Assembly.Load() tries to load 'SomeAssembly.dll.DLL'
  and fails.
- Oracle treat '\r' as an invalid character.
- DataAccessorBuilder calls DbProvider.Convert(NameToParameter) for text query
  parameters.
- SqlQueryBase.GetKeyFieldList was incorrectly marked as public.
- TypeAccessorBuilder fails to build a getter/setter if base method is protected.
- EditableXmlDocument fails to reject changes if there was an attribute insertion or
  deletion.

Enhancement

- FdpDataProvider.QuoteIdentifiers option for FB data provier.
- GenerateAtribute attribute to specify any custom attribute for a generated type or
  member.
- SQLite data provider.
- DeriveParameters implemented for MsAccess data provider.
- XmlIncludeAbstractAttribute to simplify the xml serialization of a BLToolkit generated
  type.
- Better support for internal types/members. The behavior is configurable via
  Configuration.EditableObjectUsesMemberwiseEquals property.
- VS 2008 support.


v 2.0.6

Demo

- MS PetShop 4.0 powered by BLToolkit (see the dev version of the project).

Bug fixes

- DbManager.OutputParameter lacks overload with 'size' parameters.
- CacheAspect hungs a desktop application on exit.
- ExecuteResultSet fails on many-to-one relations.
- TypeBuilder fails to override a method with generic parameters or generic return type.

Enhancement

- ParamSize & ParamDbType attributes to tweak DataAccessor parameters. Especially output
  ones.
- All 'emit.stloc' immediately followed by 'emit.ldloc' were replaced with simple
  'emit.dup' command.
  Lots of redundant local variables were removed.
- UnitTests for Oracle, Firebird & Access (Jet)
- DataSetTableAttribute is handled by all DataSet/DataTable related methods of
  DataAccessBuilder.
- ClearCache method for CacheAspect.
- Metadata provider for mapping.
- Ability to specify global assembly version & strong name key pair.
- AsyncAspect to execute any method asynchronously.
- Added support for ConnectionStrings config settings.
- Editable XmlDocuments.
- Added support for IDictionary, IDictionary<,>, IList, and IList<> abstract data
  accessor return types.


v 2.0.5

Breaking changes

- DbManager.InitCommand renamed to OnInitCommand.

Bug fixes

- System.Reflection.Emit.AssemblyBuilder assemblies are processed properly.
- RegExAttribute - now properly returns valid==true only when whole value is equal to
  match.
- EditableObject serialization issue
- StandardPropertyDescriptor.CheckNull was always returning DBNull.Value if _isNull
  handler was returning null. Now configurable via Configuration.CheckNullReturnIfNull.
- PropertyChangedBuilder was crashing when property was not public
- ObjectBinder.IsNull was serialized to resources
- Oracle provider now handles arrays of nullable types correctly.
- DataAccessor.PrepareParameters was invoked only to ref parameters.
- DataAccessor.PrepareParameters lacks DbManager which may be external.
- DbManager.InitParameters did hot handle decimal type.
- MappingSchema.ValueToEnum fails with underlying type other then Int32. 
- CounterAspect catches the OnCatch event now to count exceptions.
- DbManager.ExecuteForEach does not call InitParameters in the loop.

Enhancement

- Ability to specify RegexOptions for RegExAttribute. Regex not being created on every
  call to IsValid
- Destination attribute works with scalar types.
- DataAccessorBuilder generates getters/setters for abstract properties & indexers.
- Ability to specify globaly whether strings should be trimed when mapping
- Ability to specify whether PropertyChange notification should only be fired when
  underlying value is changed and not when setter is called
- XmlDocument type support.
- DbManager.SetParameters() accepts arrays of IDbDataParameter.
- DataSetTableAttribute for DataAccessorBuilder to explicitly specify DataSet table name.
- Default CacheAspect.IsWeak value changed to false.
- Cleanup thread for CacheAspect.
- MemberMapper type can be specified directly in the target type declaration.
- Events for DbManager.OnBeforeOperation, OnAfterOperation, OnOperationException &
  OnInitCommand.


v 2.0.4

Bug fixes

- By default, the mapper included const fields into map list (???).
- If enum does not have explicit mapping, data accessor builder 
  does not convert it to underlying type.
- MemberMapper fails to convert an object to its base type.
- BindingListImpl.RemoveSort was not firing ListChange event.
- TypeAccessor.CreateExtendedPropertyDescriptors did not work properly
  with 3rd+ level nested properties.
- Object holder ignored NoInstanceAttribute.
- ValidatorContext caches NullValue.
- EditableObject.RejectChanges/RejectMemberChanges were not firing PropertyChanged event
  for reverted fields.
- Fixed the generating IsValueType && !IsPrimitive ref/out parameters.

Enhancement

- Operator<T> is extensible now.
- ObjectBinder can now control lifetime (Disposal) of underlying collection.
- DuckTyping.
- ParamNullValue attribute.
- Virtual method DataProviderBase.PrepareCommand to let a data provider modify SQL
  statement befory query.
- Virtual method CacheAspect.GetCache. Can be used to provide a custom hashtable.


v 2.0.3

Bug fixes

- Race condition in MappingSchema.GetObjectMapper.
- DbManager will not try to close the connection in the finalizer anymore.
- MinValue/MaxValue attributes now determine value type by object property/field instead
  of test value.
- Fixed obscure case when object is removed from EditableArrayList/BindingListImpl while
  ItemPropertyChanged delegate is in process of being executed and collection handler was
  not yet invoked.

Enhancement

- HttpReader SOAP support.
- Convert<T,P> uses type cast operators when available.
- Third party DataProvider registration via appsettings.
- More specification adherent sorting behavior implementation of 
  IBindingList/IBindingListView in BindingListImpl. 
- EditableArrayList (potentially breaking changes) heavily relies on BindingListImpl for
  IBindingList/IBindingListView and their base interfaces implementation. 
- BindingListImpl is changed to be fully specification adherent binding wrapper for other
  object lists/collection types.
- 2.0.1 version obsolete methods have been removed.


v 2.0.2

Bug fixes

- Abstract class builder overrode virtual final methods.
- Append records to a log file.
- ObjectBinder's AllowNew, AllowEdit, AllowRemove properties serialization.

Enhancement

- New DataAccessor<T,A> class.
- Direction.ReturnValueAttribute takes the Member parameter in '@fieldName' format.
- New property Object of the InterceptCallInfo class, which is an intercepted object
  reference.
 
© 2010 www.bltoolkit.net
[email protected]