CodeFluent Builds History - 12/29/2009 17:19:37
Note: for previous history, please refer to the old file here.
Please contact support@codefluent.com for any question.
Build 31229
 
New Features:
  Runtime - Silverlight - Task6252 : Added support for Silverlight 4 (Beta).
  
There is a new file CodeFluent.Runtime.Silverlight4.dll shipped with CodeFluent, that should be used for Silverlight 4 projects.
Bug Fixes:
  Producers - Model - Bug6249 : Generated BOM does not support count() methods or enum values sending back value not of the int32 type.
  
This is occurring only with generated stored procedures for Oracle Database.
  Tools - Starter Wizard - Bug6235 : Starter Wizard fails at step 2 with a stack frame showing a NullReferenceException on CreateProject().
Build 31217
 
New Features:
  Patterns - AssociationManage - Task6223 : Added Oracle support for Association Manage pattern.
  Patterns - Localization - Task6224 : Added Oracle support for Localization pattern.
  Producers - Model - Task6234 : Code for generated collection method 'SaveAll' now removes items with EntityState set to Deleted.
  Producers - Oracle - Task6225 : Added Oracle producer (Beta).
  Runtime - Web - ASP.Net Providers - Task6226 : Added Oracle support for ASP.NET membership & role providers.
Bug Fixes:
  Tools - Starter Wizard - Bug6235 : Starter Wizard fails at step 2 with a stack frame showing a NullReferenceException on CreateProject().
Build 31214
 
Bug Fixes:
  Producers - Model - Bug6137 : The BOM producer does not use the 'entityDisplay' attribute for derived entities.
Build 31126
 
New Features:
  Importers - Enterprise Architect - Task6127 : Enterprise Architect Importer is now available (in Beta).
  
This is a sample importer definition file for a model named EA.Sample.eap. The connection string needs to attributes:

1) Data Source: the .eap file path (may be relative).
2) Package Name: the UML package name to be imported. A .EAP files contains a lot of UML packages. The available package names can be determined using EA's 'Class diagrams' node in the project browser, or using CodeFluent Meta Model Explorer, the Tools / Database Generic Explorer menu.

<?xml version="1.0" encoding="utf-8"?>
<EnterpriseArchitectImporter xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Verbosity>0</Verbosity>
  <Project>
 <DefaultNamespace>EA.Sample</DefaultNamespace>
 <SaveOptions>Free</SaveOptions>
 <Attributes>
   <Attribute>
  <Name>MustCreateDefaultApplication</Name>
  <Value>false</Value>
   </Attribute>
   <Attribute>
  <Name>MustCreateDefaultHints</Name>
  <Value>false</Value>
   </Attribute>
   <Attribute>
  <Name>DefaultMaxLength</Name>
  <Value>64</Value>
   </Attribute>
   <Attribute>
  <Name>DefaultTrackingModes</Name>
  <Value>None</Value>
   </Attribute>
   <Attribute>
  <Name>DefaultConcurrencyMode</Name>
  <Value>None</Value>
   </Attribute>
   <Attribute>
  <Name>DefaultPersistenceUnicode</Name>
  <Value>true</Value>
   </Attribute>
 </Attributes>
  </Project>
  <Entity>
 <Attributes>
   <Attribute>
  <Name>ConcurrencyMode</Name>
  <Value>None</Value>
   </Attribute>
   <Attribute>
  <Name>TrackingModes</Name>
  <Value>None</Value>
   </Attribute>
 </Attributes>
  </Entity>
  <CultureName>en-US</CultureName>
  <RemovePlural>true</RemovePlural>
  <CamelizeNames>true</CamelizeNames>
  <ConnectionString>Data Source=c:\temp\EA.Sample.Eap;Package Name=Abstract Class Model (PIM)</ConnectionString>
</EnterpriseArchitectImporter>
Bug Fixes:
  Modeling - Bug6117 : The transposeFormat parameter may be incorrect for Lightweight entities read.
  Modeling - Bug6128 : The "[[" string in a code snippet is incorrectly replaced by "<<<".
  Runtime - SharePoint - Bug6130 : Paging may not work when using EntityHyperLinkControl (the default renderer of CodeFluent SharePoint Runtime for 1:M relation properties).
  Runtime - SharePoint - Bug6131 : Relation properties displayed by CodeFluent EntityGridPart may be incorrectly displayed when paging is used.
Build 31120
 
Bug Fixes:
  Runtime - Bug6116 : Database connections are not closed when using the CodeFluentContext.RunOnNew method.
Build 31117
 
New Features:
  Producers - Model - Task6104 : A new Patch producer has been added.
  
This producer runs a series of text-based patches on files or directories. Example:
  <cf:producer typeName="CodeFluent.Producers.CodeDom.SearchAndReplaceProducer, CodeFluent.Producers.CodeDom">
    <cf:configuration>
        <patch path="Persistence" fileSearchPattern="*.sql" pattern="ID(?<name>.*)" replace="name=newName" />
        <patch path="Model" fileSearchPattern="*.cs" pattern="blablahh(?<id>[a-z]*)blablah(?<id2>[0-9]*)" replace="id1=whatever;id2=whatever2" />
    </cf:configuration>
  </cf:producer>

'path' can be a directory path or a file path. If relative, it is based from the directory containing the project root part.
'pattern' is a regular expression defining matching groups (see regex documentation for matching groups syntax).
'replace' is a comma separated list of key=value pairs, with a group name as the key, and the replacement string as the value.
'fileSearchPattern' is a file filter expression. Only used if 'path' is a directory.
Bug Fixes:
  Producers - SqlServer - Bug6103 : Instances containing blobs for an entity declared in a specific schema cannot be saved to the persistence layer.
Build 31113
 
New Features:
  64 bits - Task6090 : CodeFluent 64bits native version is now available in Beta.
  
Note: some CodeFluent features are supported only with the 32 bits version, due to platform limitations: Access & Jet 4.0 importer, OLEDB importer
  Modeling - Task5713 : Entity instances can now contain Lightweight entities values.
  
Example:
  <Address>
    <Id />
    <Line />
    <Geolocation typeName="Geolocation" />
    <cf:instance><Id>1</Id><Line>Somewhere</Line><Geolocation><Latitude>12.1234</Latitude><Longitude>4.222</Longitude></Geolocation></cf:instance>
  </Address>

  <Geolocation lightWeight="true">
    <Latitude typeName="float" />
    <Longitude typeName="float" />
  </Geolocation>
Bug Fixes:
  Modeling - Bug6072 : The 'viewName' attribute is now supported on properties of project entity type.
  
It is also supported by the SharePoint WebParts producer.
  Modeling - CFQL - Bug6048 : Self M:M relation defined on the same property may generate an incorrect SqlDom method.
Build 31105
 
New Features:
  Tools - Model Explorer - Task6047 : Added Database Generic Explorer feature to the Meta Model Explorer tool.
Build 31022
 
New Features:
  Patterns - TextSearch - Task6038 : A text search pattern has been added to the list of official patterns.
Build 31014
 
New Features:
  Patterns - AutoFormattable - Task5835 : AutoFormattable patterns now supports derived collections.
Build 30904
 
New Features:
  Modeling - Task5699 : Instances can now be produced using a per-entity sort order.
  
Each entity is assigned by default an instance sort order based on its alphabetical order. The 'instancesSortOrder' attribute can be specified on the entity XmlElement to override this order. Example:

 <EmployeeJob instancesSortOrder="-1">
  <Id />
  <Label />
  <cf:instance sortOrder="1"><Id>1</Id><Label>Director</Label></cf:instance>
 </EmployeeJob>

 <Employee>
  <Id />
  <Name />
  <cf:instance sortOrder="2"><Id>1</Id><Name>John Coppola</Name></cf:instance>
  <cf:instance sortOrder="1"><Id>2</Id><Name>Steven Spielberg</Name></cf:instance>
 </Employee>

In this example, EmployeeJob instances will be produced first. This can be useful for example when referential integrity is enforced on the persistence layer.
Build 30820
 
New Features:
  Importers - SqlServer - Task5026 : The legacy SQL Server importer has been removed and is not shipped with CodeFluent builds any more.
Build 30813
 
New Features:
  Modeling - LightWeight Entities - Task5660 : Database columns for properties of an existing type now match the Clr property type.
  
This is a breaking change if database was accessed using other methods than the CodeFluent provided ones.
  Producers - Model - Task5659 : Code comments are now added to non paged methods.
  Runtime - Task5676 : Added Oracle support to the CodeFluent runtime.
  
Supports both Oracle's Oracle.DataAccess.Client (ODP.Net) and Microsoft's System.Data.OracleClient (standard .NET).

.config file example for .NET oracle provider:
<Oracle.HR connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MYORACLESERVER)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)));user id=HR;password=hr" persistenceTypeName="System.Data.OracleClient.OracleConnection, System.Data.OracleClient"/>

.config file example for ODP.NET oracle provider:
<Oracle.HR connectionString="Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=MYORACLESERVER)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)));user id=HR;password=hr" persistenceTypeName="Oracle.DataAccess.Client.OracleConnection, Oracle.DataAccess.Client"/>
Bug Fixes:
  Modeling - Bug5642 : Metadata properties (used by blob properties for example) are now nullable by default.
  
This is typically used for project where defaultNullableProperty is set to 'false' (the default value is 'true'). Instances for blob properties with external file now automatically use the file properties to define metadata values.
  Runtime - Silverlight - Bug5647 : CodeFluent Runtime for Silverlight now supports Silverlight 3.
  
A project targeting Silverlight 3 must use the new assembly CodeFluent.Runtime.Silverlight3.dll. Projects targeting Silverlight 2 must continue to use CodeFluent.Runtime.Silverlight.dll
Build 30730
 
Bug Fixes:
  Modeling - CFQL - Bug5616 : CFQL may infer incorrect joins and expressions when using queries involving relations between an entity and one of its derived entity.
Build 30618
 
New Features:
  Producers - SharePoint - Task5244 : WSS entity parts can derive from intermediate entity parts.
  
In this example, we redefine the base grid part for the whole project. The MyEntityGridPart needs to derive from the CodeFluent EntityGridPart.

  <cf:producer name="WSS" typeName="CodeFluent.Producers.SharePoint.WebPartsProducer, CodeFluent.Producers.SharePoint">
  <cf:configuration targetDirectory="mydir" ... >
     <baseClass typeName="CodeFluent.Runtime.SharePoint.WebControls.EntityGridPart" baseTypeName="{1}.MyEntityGridPart" />
  </cf:configuration>
  </cf:producer>

{0} represents the default namespace
{1} represents the project webparts namespace
  Producers - SharePoint - Task5351 : Site Creator now supports localized SharePoint WSS/MOSS installations.
Bug Fixes:
  Runtime - SharePoint - Bug5352 : Selecting a row in the EntityGridPart does not update a consumer connected webpart if .NET Framework 3.5 SP1 is installed.
Build 30605
 
New Features:
  Runtime - SharePoint - Task5331 : SharePoint Runtime now supports running CodeFluent methods with elevated privileges.
  
This allows for example to use an integrated security connection string.
Bug Fixes:
  Modeling - Bug5312 : CodeFluent model node with a specified attribute node may have an invalid ModelUniqueId value.
  Modeling - SDK - Bug5295 : Enumeration Values created using the CodeFluent API cannot be used in stored procedures.
Build 30529
 
New Features:
  Producers - Model - Task5248 : A custom path format can be defined for generated code files.
  
The following example will create [Path]\[Entity].g.cs files for C# projects:

<cf:producer name="Model" typeName="CodeFluent.Producers.CodeDom.CodeDomProducer, CodeFluent.Producers.CodeDom">
    <cf:configuration 
                productionTargetPathFormat="{0}\{1}.g{2}"
                outputName="{0}.dll"
                generateDocumentation="true"
                targetDirectory="%CF_BUILD_NUMBER%\Model" />
    </cf:configuration>
  </cf:producer>

{0} is the target directory
{1} is the file name without extension
{2} is the file extension (".cs" for C# files)
Bug Fixes:
  Producers - Model - Bug5294 : 'entityDisplay' attribute is not used by the CodeFluent parser for properties of type Entity or Collection.
Build 30520
 
New Features:
  Modeling - Rules - Task5185 : New validation rules: UrlValidate & EmailValidate.
  
Exemple:
  <Company>
    <Id />
    <Name />
    <SiteUrl typeName="url">
      <cf:rule typeName="UrlValidate" validPorts="80,443" validSchemes="http,https" />
    </SiteUrl>
    <Email typeName="email">
      <cf:rule typeName="EmailValidate" validDomains="*.com,*.fr" />
    </Email>
  </Company>
  Producers - SharePoint - Task5184 : WebParts producer Site Creator can now use entity category path instead of namespace when creating the sample document library.
  
Set the 'siteCreatorUsesCategoryPath' attribute to true in the producer configuration. The default is false.
Build 30515
 
New Features:
  Modeling - Task5150 : Raw Names Transforms ("TNT") now supports enumeration values.
  
The expression between $ and $ must contains the full name of the enumeration value. Example: 

  <Order>
    <Id />
    <Status typeName="Test.Status" />
    <cf:method name="DeleteSomeInvalidOrders" body="raw()">DELETE TOP (2.5) PERCENT FROM $Order$ WHERE $Status$ = $Test.Status.Invalid$" />
  <Order>
  
  <StatusEnum namespace="Test">
    <Unknown />
    <Valid />
    <Invalid />
  </StatusEnum>
Bug Fixes:
  Modeling - Bug5112 : The 'constraintShortName' attribute can now be specified on derived primary keys.
  
To declare a specific 'constraintShortName' on primary keys of derived entities, you need to redeclare the derived property corresponding to the primary key. Example:

<Convoy baseTypeName="Truck">
   <Id constraintShortName="ConvoyPK" />
   <TrucksCount />
 </Convoy>
<Truck baseTypeName="Vehicule">
   <Id constraintShortName="TruckPK" />
   <Capacity />
 </Truck>
<Vehicle>
 <Id constraintShortName="VehiclePK" />
 <WheelsCount />
</Vehicle>
  Modeling - CFQL - Bug5012 : Invalid 'expression' attributes defined on properties or view properties may not correctly be handled. Parsing fails with an IndexOutOfRangeException error.
  Modeling - LightWeight Entities - Bug5072 : Persistent views may be incorrectly generated depending on the persistence naming convention.
Build 30511
 
New Features:
  Modeling - Task5098 : The 'lightWeight' attribute can now be spelled 'lightweight'. Compatibility is preserved for existing models.
Bug Fixes:
  Producers - Model - Bug5103 : C# Xml Documentation (messages with '_doc' class) is now generated for project type properties.
Build 30507
 
New Features:
  Importers - Access - Task5113 : Access Importer now import OLE Object column instances as CodeFluent Binary Large Objects (blobs).
  
By default, OLE Object columns are imported as byte[]. You need to specify custom ColumnTypeMappers to force the mapping to a CodeFluent blob type. Example with the NorthWinds database:
<AccessImporter>
  <Project><DefaultNamespace>Northwinds</DefaultNamespace><SaveOptions>Free</SaveOptions>
    <Attributes>
      <Attribute><Name>MustCreateDefaultApplication</Name><Value>false</Value></Attribute>
      <Attribute><Name>MustCreateDefaultHints</Name><Value>false</Value></Attribute>
      <Attribute><Name>DefaultMaxLength</Name><Value>64</Value></Attribute>
      <Attribute><Name>DefaultTrackingModes</Name><Value>None</Value></Attribute>
      <Attribute><Name>DefaultConcurrencyMode</Name><Value>None</Value></Attribute>
      <Attribute><Name>DefaultPersistenceUnicode</Name><Value>true</Value></Attribute>
    </Attributes>
  </Project>
  <Entity>
    <Attributes>
      <Attribute><Name>ConcurrencyMode</Name><Value>None</Value></Attribute>
      <Attribute><Name>TrackingModes</Name><Value>None</Value></Attribute>
    </Attributes>
  </Entity>
  <ColumnTypeMappers>
    <ColumnTypeMapper> <!-- don't specify TableName so it can work for all tables -->
      <ColumnName>Picture</ColumnName>
      <TypeName>Picture</TypeName>
    </ColumnTypeMapper>
    <ColumnTypeMapper> <!-- don't specify TableName so it can work for all tables -->
      <ColumnName>Photo</ColumnName>
      <TypeName>Picture</TypeName>
    </ColumnTypeMapper>
  </ColumnTypeMappers>
  <CreatePrimaryKeyColumn>false</CreatePrimaryKeyColumn>
  <MaxEntities>99999</MaxEntities>
  <MaxInstances>20</MaxInstances>
  <InstanceImportOptions>
    <!-- Blobs instances with size below this value are inlined in the Xml instances part; otherwise they are imported as external files. The default value is 1024 -->
    <InlineBlobInstanceMaxSize>20000</InlineBlobInstanceMaxSize>
  </InstanceImportOptions>
  <KeyFormat>{0}_id</KeyFormat>
  <GeneratedKeyFormat>{0}Id</GeneratedKeyFormat>
  <CultureName>en-US</CultureName>
  <RemovePlural>true</RemovePlural>
  <CamelizeNames>true</CamelizeNames>
  <ConnectionString>Data Source=c:\temp\nwind\Nwind.accdb</ConnectionString>
</AccessImporter>
Build 30430
 
New Features:
  Producers - Model - Task5071 : BOM producer now generates Xml documentation for Enumerations.
  Producers - Model - ASP.Net Providers - Task5082 : Generated ASP.NET providers now support a manually defined association entity for the User - Role relation.
  
Example:

 <cf:entity name="User" directoryEntityType="User">
  <cf:property name="Id" typeName="guid" cfps:rowguidcol="true" />
  <cf:property name="Login" collectionKey="true" />
  <cf:property name="Password" />
  <cf:property name="Email" />
   ... other properties ...
  <cf:property name="Roles" typeName="UserRoleCollection" />
 </cf:entity>

 <cf:entity name="Role" directoryEntityType="Role" >
  <cf:property name="Id" typeName="guid" cfps:rowguidcol="true" />
  <cf:property name="Name" collectionKey="true" />
  <cf:property name="Users" typeName="UserRoleCollection" />
   ... other properties ...
 </cf:entity>

 <cf:entity name="UserRole">
  <cf:property name="Id" typeName="guid" cfps:rowguidcol="true" />
  <cf:property name="User" typeName="User" />
  <cf:property name="Role" typeName="Role" />
   ... other properties ...
 </cf:entity>
Bug Fixes:
  Modeling - Bug5017 : The snippet name transformation notation ($Entity::Property$) did not support properties defined on the base entity if Entity is a derived entity.
  Modeling - CFQL - Bug5033 : CFQL view expression using base properties for derived entities used as properties may build invalid SQLDom expressions with missing ascendant joins.
Build 30417
 
New Features:
  Producers - Task5023 : PropertyChanged events are now raised for associated properties change (in the case of entity type properties).
  Producers - Office - Task5022 : Office Producer now supports the 'loadMethodName' attribute for lookup fields.
  Tools - Task4922 : A Starter Wizard tool has been added for designing simple models.
Bug Fixes:
  Modeling - Bug5013 : The parsing phase may throw an internal exception if derived entities of setType 'Collection' are defined in hierarchy reverse order.
  Modeling - Bug5017 : The snippet name transformation notation ($Entity::Property$) did not support properties defined on the base entity if Entity is a derived entity.
  Modeling - CFQL - Bug5012 : Invalid 'expression' attributes defined on properties or view properties may not correctly be handled. Parsing fails with an IndexOutOfRangeException error.
  Modeling - CFQL - Bug5014 : CFQL methods using base properties for derived entities used as properties may raise an internal exception "missing join for table".
  Modeling - CFQL - Bug5016 : Return type name on autoLightWeight entities methods with nullable parameters may be wrong.
  Modeling - Persistence - Bug5011 : Derived entities should not inherit constraints names defined with the 'constraintShortName' attribute. This could lead to a duplicate constraint definition in persistence providers.
  Producers - Model - Bug5015 : Model Producer generates a call to a unknown procedure in the case of Many to many relations with entities in different persistence schema.
Build 30417
 
Bug Fixes:
  Runtime - Bug5010 : SQL Server's SqlConnection ClearPool method should not be called when using other persistence providers (Oracle, ...).
Build 30109
 
New Features:
  Producers - SharePoint - Task4453 : Generated SharePoint Web Parts now can synchronize with Microsoft Excel 2003, 2007 and Access 2007.
  
The Actions menu now works as expected
  Producers - SqlServer - Task4450 : The SQL Server specific 'dataType' attribute is now supported on Parameter and UserType nodes.
  
Example 1:
    <cf:method name="Test1" body="raw(char separator)">
        <cf:parameter name="separator" cfps:dataType="nchar" />
    </cf:method>

Example 2:
    <cf:userType name="sqlchar" typeName="char" cfps:dataType="nchar"/>
    <cf:method name="Test2" body="raw(sqlchar separator)" />
  Runtime - SharePoint - Task1307 : SharePoint Producer (Beta).
  Runtime - SharePoint - Task4451 : SharePoint Web Parts now render the beginning of an array of bytes instead of the 'System.Byte[]' string for Binary properties.
Build 30105
 
New Features:
  Producers - Office - Access Synchronisation - Task4364 : Access Synchronisation feature has been added (Beta). The feature is part of the Office producer.
  
Office synchronization feature now supports Microsoft Access 2007, Microsoft Excel 2003/2007 for front ends. Back end can be IIS based or WCF (ServiceHost) based.
Bug Fixes:
  Producers - Model - Bug4370 : Function parameters were not supported by CFQL Count methods.
Build 30102
 
New Features:
  Runtime - Blobs - Task4402 : Embedded BitsServer now handles BASIC authentication, and supports ASP.NET membership providers.
  Runtime - Utilities - Task4382 : Threads in the CodeFluent CustomThreadPool utility can now have a specific culture and ui culture.
Build 21219
 
Bug Fixes:
  Importers - SqlServer - Bug4365 : SqlServer importer fails when importing AdventureWorks2008.
  
The new SQL2008 hierarchyId type is not supported by DMO, which is used by this importer. The new version shipped with this build now raises a warning but continues. Note this importer is obsolete, you should use the new one: "CodeFluent.Importers.Database.SqlServerImporter, CodeFluent.Importers.Database".

The new importer can successfully import the model, but fails to generate because CodeFluent does not support hierarchyid as valid type for key columns. You can override the default importer types by adding a custom TypeMapper for the hierarchyid type. You can also patch the generated model manually. The following example associates hierarchyid with the string type:
<?xml version="1.0" encoding="utf-8"?>
<SqlServerImporter xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Verbosity>0</Verbosity>
  <Project>
 <DefaultNamespace>AdventureWorks2008</DefaultNamespace>
 <SaveOptions>Free</SaveOptions>
 <Attributes>
   <Attribute>
  <Name>MustCreateDefaultApplication</Name>
  <Value>false</Value>
   </Attribute>
   <Attribute>
  <Name>MustCreateDefaultHints</Name>
  <Value>false</Value>
   </Attribute>
   <Attribute>
  <Name>DefaultMaxLength</Name>
  <Value>64</Value>
   </Attribute>
   <Attribute>
  <Name>DefaultTrackingModes</Name>
  <Value>None</Value>
   </Attribute>
   <Attribute>
  <Name>DefaultConcurrencyMode</Name>
  <Value>None</Value>
   </Attribute>
   <Attribute>
  <Name>DefaultPersistenceUnicode</Name>
  <Value>true</Value>
   </Attribute>
   <Attribute>
  <Name>defaultBindingList</Name>
  <Value>false</Value>
  <Namespace>http://www.softfluent.com/codefluent/producers.model/2005/1</Namespace>
   </Attribute>
 </Attributes>
  </Project>
  <Entity>
 <Attributes>
   <Attribute>
  <Name>ConcurrencyMode</Name>
  <Value>None</Value>
   </Attribute>
   <Attribute>
  <Name>TrackingModes</Name>
  <Value>None</Value>
   </Attribute>
 </Attributes>
  </Entity>
  <TypeMappers>
    <TypeMapper>
    <DataType>hierarchyid</DataType>
    <TypeName>string</TypeName>
    </TypeMapper>
  </TypeMappers>
  <CreatePrimaryKeyColumn>false</CreatePrimaryKeyColumn>
  <MaxEntities>40000</MaxEntities>
  <KeyFormat>{0}_id</KeyFormat>
  <GeneratedKeyFormat>{0}Id</GeneratedKeyFormat>
  <CultureName>en-US</CultureName>
  <RemovePlural>true</RemovePlural>
  <CamelizeNames>true</CamelizeNames>
  <ConnectionString>server=myserver\SQL2008;database=AdventureWorks2008;Integrated Security=true</ConnectionString>
</SqlServerImporter>
  Modeling - Bug4321 : Any empty nodes throws an "CodeFluentTemplateException: Value cannot be null." if 'createDefaultApplication' is set to true.
  Producers - Model - Bug4324 : Enumeration types used as keys in composite key are not checked for the default value (usually 0) anymore.
Build 21208
 
New Features:
  Modeling - Task4294 : Breaking change: SEARCH(*) methods now automatically create Model Nullable properties for boolean properties.
  
This may cause compilation errors with the generated model files.
Build 21128
 
Bug Fixes:
  Producers - Model - Bug4024 : The INotifyCollectionChanged CollectionChanged subscription event was never released.
Build 21127
 
New Features:
  Tools - Model Explorer - Task4056 : Added support for Graphviz versions higher than 2.20.
  
Previous builds did not detected recent versions of Graphviz.
Build 21124
 
Bug Fixes:
  Producers - Model - Bug4024 : The INotifyCollectionChanged CollectionChanged subscription event was never released.
Build 21113
 
New Features:
  Runtime - Task3987 : Added a Dispose(bool threadOwned) method to CodeFluentPersistent class.
  
This method is used to reset the CodeFluent thread owned underlying ADO.NET connection. It can be only in database connection exception handling.
Build 21107
 
New Features:
  Producers - Model - Task3920 : CodeFluent generated entities now implement the IComparable<> interface.
Bug Fixes:
  Producers - ServiceModel - Bug3981 : ServiceModel templates & object model do not support multiple ICodeFluentBinaryService implementation.
  
Note: the client app.config may need to be changed to work with the newly generated proxy classes, in the case of entities with binary large object properties. Take a look at the Templates\ServiceModel\Client\[Template]App.config file provided with CodeFluent for change details.
Build 21029
 
New Features:
  Patterns - AutoFormattable - Task3857 : The AutoFormattable pattern now supports the Service Model producer and the Service Model Object Model (SCOM).
Bug Fixes:
  Patterns - Localization - Bug3835 : Order of delete clauses for referenced tables in delete procedures was not correct for derived entities.
  Runtime - Office - Bug3865 : Deleting a row in an Excel Sync List always raises an error in Excel UI even when the command succeeds.
Build 21021
 
New Features:
  Importers - SqlServer - Task3815 : SQL Server importer now supports the rowguidcol attribute (see Task3721).
Build 21016
 
New Features:
  Modeling - CFQL - Task3762 : Search methods can automatically use StartsWith operator instead of Equals automatically on parameter of string type.
  
Set the 'autoStartsWith' attribute to 'true' on method, entity or project node. Example:
 <Customer >
  <Id />
  <FirstName />
  <LastName />
  <cf:method name="SearchAutoStartWith" body="search(*)" autoStartsWith="true" />
 </Customer>
  Producers - SqlServer - Task3721 : uniqueidentifier columns can now be declared as the ROWGUIDCOL.
  
Use the boolean 'rowguidcol' attribute in the SQL Server producer specific XML namespace. Note: this attribute is not handled by the producer diff engine, it has to be present when the table is created. Example:
<Customer>
 <Id typeName="guid" cfps:rowguidcol="true" />
</Customer>
Bug Fixes:
  CodeFluent - Bug3754 : A "Cannot enlist in the transaction because a local transaction is in progress on the connection. Finish local transaction and retry" exception happened in some ADO.NET local transaction scenarios.
  
The workaround was to set the AutoEnlistTransaction property to true on the CodeFluent persistence instance.
  Producers - Model - Bug3769 : ModelNullable parameters are now supported in loadone() methods.
Build 21006
 
New Features:
  Patterns - Localization - Task3672 : Localization pattern now supports custom naming conventions.
  Producers - SqlServer - Task3659 : Custom SQL scripts can be executed by the SQL Server Producer between standard scripts.
  
Custom scripts need to have the same name as the standard scripts, in the same directory, but prefixed with 'before_' or 'after_'. For example, if a project has a 'SoftFluent.CarRental' default namespace, a file script named 'after_SoftFluent.CarRental_runtime.sql' will be executed after the standard 'SoftFluent.CarRental_runtime.sql'.
  Runtime - Web - ASP.Net Providers - Task3673 : Membership ASP.NET providers now supports custom naming conventions.
Bug Fixes:
  Patterns - Localization - Bug3134 : Localization Pattern now always sort by LCID before any other order by clause.
Build 20929
 
New Features:
  Producers - Model - Task3606 : Added a DeletionState flag to the EntityTrackingModes enumeration.
  
This flag is similar to the CreationState flags. It is used by the model producer for the EntityState property code generation. If this flag is set, an EntityState with a ToBeDeleted value will keep this value even if the holding entity instance properties are modified. Note: the default value for entityTrackingModes attribute is now "Time,User,CreationState,DeletionState".
Build 20926
 
New Features:
  Producers - SqlServer - Task3534 : SQL Server producer can now produce schemas.
  
You need to add the 'produceSchemas' to the producer configuration and set it to 'true'. The default value is 'false'. Schema owner can optionally be specified on the schema node (in this case, the schema node needs to be explicit) using the producer XML namespace. The default value is 'dbo'. Exemple:

<cf:schema name="Sales" cfps:owner="dbo" />
<Customer schema="Sales" >
 <Id />
 <Name />
</Customer>
  Runtime - Web - Custom Controls - Task3533 : Added an ASP.NET property grid custom control.
Bug Fixes:
  Modeling - Bug3172 : EntityState was always set to 'modified' for relation properties not yet loaded.
  
Note: a new flag 'EntityKeyCheck' has been added to the PropertyTrackingModes enumeration. It is by default enabled for the new behavior, so if 'trackingModes' at property node level or 'defaultPropertyTrackingModes' attributes at entity and project level are redefined, this flag needs to be added as well in the redefinition.
Revision: return case has been modified to copy the existing relation object if it exists and matches the current identifiers.
  Modeling - CFQL - Bug3407 : CFQL SEARCH methods expressions has been expanded.
Build 20922
 
New Features:
  Modeling - CFQL - Task3397 : CFQL SEARCH methods now support dynamic ORDER BY.
  
Dynamic ORDER BY are created when properties are defined as sortable. To define properties as sortable, you can use the 'sortable' attribute at property level, or 'defaultSortable' at entity and project levels. LOAD methods currently support only one dynamic ORDER BY parameter, but SEARCH methods support a variable number of dynamic ORDER BY parameters. The number of dynamic ORDER BY parameters can be specified at method ('persistenceOrderByParametersCount' attribute), entity or project level ('defaultPersistenceOrderByParametersCount' attribute). Example:
   <Customer defaultSortable="true" >
      <Id />
      <cf:method name="SearchByName" persistenceOrderByParametersCount="5" body="search()" />
   </Customer>
  Modeling - CFQL - Task3398 : CFQL SEARCH methods now support function parameters.
  Producers - Model - Task3405 : Added an attribute to prevent nullable check in entity code generated by the Model producer.
  
Added the 'nullValidate' attribute in the Model producer XML namespace to prevent local null validation for the Model producer. The exact same attribut in the same namespace can be used at entity or project level. Example:

   <Customer>
      <Id cfom:nullValidate="false" />
   <Customer>

   <Customer cfom:nullValidate="false">
      <Id />
   <Customer>
Bug Fixes:
  Producers - Model - Bug3404 : LightWeight entity code for derived types may not be compilable.
Build 20919
 
New Features:
  Runtime - Utilities - Task3327 : Added Country and Currency helpers routines.
  
The CodeFluent.Runtime.Utilities.Country class now defines

public static Country[] GetCurrencyCountries(string isoCurrencySymbol)
-> gets the list of countries using a given currency

public static Country[] AllCountries 
-> gets the list of countries installed in the system
Build 20917
 
New Features:
  Modeling - Task3243 : Added the possibility to deactivate the IEquatable implementation on generated entities classes.
  
Set the new 'identityModes' attribute to "None" at entity node level, or 'defaultIdentityModes' to 'None' at the project node level. Note: deactivating the IEquatable implementation also deactivates the System.Object.Equals standard override.
  Modeling - CFQL - Task3247 : CFQL SEARCH methods now supports static ORDER BY clause.
  Patterns - Localization - Task3248 : Localization Pattern now supports instances.
  
To create a localized value in an instance, add an Xml element like an instance value, in the localization pattern Xml namespace. The local name of the element must match the name of localized property. The 'cultureName' attribute determines the locale to use. Example:

<Product>
   <Id />
   <Description loc:localizable="true" />
   <cf:instance><Id>1</Id><loc:Description cultureName="1033">This is a product</loc:Description><loc:Description cultureName="1036">Ceci est un produit</loc:Description></cf:instance>
</Product>

Default value are also supported, using standard instance value notation. Exemple:
   <cf:instance><Id>1</Id><Description>This is the default value</Description><loc:Description cultureName="1033">This is a product</loc:Description><loc:Description cultureName="1036">Ceci est un produit</loc:Description></cf:instance>
  Producers - Task3249 : Enhanced sharing violation detection has been extended (see Task 2720).
  Runtime - Task3241 : Added nested TransactionScope support (see also 3242).
  
At runtime, CodeFluent throws an exception when generated CodeFluent code tries to enlist in nested transactions. Example:

using (TransactionScope scope = new TransactionScope())
{
   Succeed1();
   using (TransactionScope scope2 = new TransactionScope(TransactionScopeOption.RequiresNew))
   {
         Succeed2();
         scope2.Complete();
   }
   Fail();
   scope.Complete();
}

In this exemple, nothing commits, because the call to Succeed2() raises a CodeFluentRuntimeException (nested transactions are not allowed on the same CodeFluent Context). To make it work as expected, use the following syntax:

using (TransactionScope scope = new TransactionScope())
{
   Succeed1();
   using (TransactionScope scope2 = new TransactionScope(TransactionScopeOption.RequiresNew))
   {
      CodeFluentContext.Get(Constants.<your namespace>).RunOnNew(delegate()
      {
         Succeed2();
      });
      scope2.Complete();
   }
   Fail();
   scope.Complete();
}
In this case, Succeed2() runs on a new transient CodeFluent context.
  Runtime - Task3242 : Added nested TransactionScope detection in different CodeFluent contexts (see also 3241).
  
At runtime, CodeFluent now throws an exception when generated CodeFluent code tries to enlist in nested transactions. Example:

using (TransactionScope scope = new TransactionScope())
{
   Succeed1();
   using (TransactionScope scope2 = new TransactionScope(TransactionScopeOption.RequiresNew))
   {
         Succeed2();
         scope2.Complete();
   }
   Fail();
   scope.Complete();
}

Previously, with this exemple, nothing commited, because Succeed2() is enlisted in scope, not scope2. Starting with this build, Succeed2() now raises a CodeFluentRuntimeException. See Task3231 to see how to use nested TransactionScopes with CodeFluent, to make sure Succeed2() commits.
Bug Fixes:
  Modeling - Bug3172 : EntityState was always set to 'modified' for relation properties not yet loaded.
  
Note: a new flag 'EntityKeyCheck' has been added to the PropertyTrackingModes enumeration. It is by default enabled for the new behavior, so if 'trackingModes' at property node level or 'defaultPropertyTrackingModes' attributes at entity and project level are redefined, this flag needs to be added as well in the redefinition.
Revision: return case has been modified to copy the existing relation object if it exists and matches the current identifiers.
  Modeling - CFQL - Bug3211 : CFQL SEARCH methods did not properly support $parameter function.
  Runtime - Bug3264 : CodeFluent context implicit transaction was not always reset.
Build 20905
 
New Features:
  Producers - Model - Task3066 : Generated 'loadone' methods on entities may not return null if one of the entity key value has the default value.
  
Add the 'returnOnDefaultKeyValue' attribute in the Model producer namespace and set it to 'false' (the default is 'true') to remove the default value equality check. Exemple:
 <cf:method name="LoadByEntityArg" body="loadone(Customer) where Customer = @Customer">
    <cf:parameter name="Customer" cfom:returnOnDefaultKeyValue="false" cfom:xmlns="http://www.softfluent.com/codefluent/producers.model/2005/1"/>
 </cf:method>
Build 20818
 
New Features:
  Tools - Model Explorer - Task3017 : Graphs visualization has been enhanced in the Meta Model Explorer tool.
  
This is based on Graphviz, that needs to be installed first. see http://www.graphviz.org for information.
Build 20812
 
New Features:
  Importers - Access - Task2847 : Added an Access importer.
  
Command line example:
Codefluent.import.exe "CodeFluent.Importers.Database.AccessImporter, CodeFluent.Importers.Database" Northwinds.Access.Importer.xml

Xml file example:
<?xml version="1.0" encoding="utf-8"?>
<AccessImporter>
  <Project>
 <DefaultNamespace>Northwinds</DefaultNamespace>
 <SaveOptions>Free</SaveOptions>
 <Attributes>
   <Attribute><Name>MustCreateDefaultApplication</Name><Value>false</Value></Attribute>
   <Attribute><Name>MustCreateDefaultHints</Name><Value>false</Value></Attribute>
   <Attribute><Name>DefaultMaxLength</Name><Value>64</Value></Attribute>
   <Attribute><Name>DefaultTrackingModes</Name><Value>None</Value></Attribute>
   <Attribute><Name>DefaultConcurrencyMode</Name><Value>None</Value></Attribute>
   <Attribute><Name>DefaultPersistenceUnicode</Name><Value>true</Value></Attribute>
 </Attributes>
  </Project>
  <Entity>
 <Attributes>
   <Attribute><Name>ConcurrencyMode</Name><Value>None</Value></Attribute>
   <Attribute><Name>TrackingModes</Name><Value>None</Value></Attribute>
 </Attributes>
  </Entity>
  <CreatePrimaryKeyColumn>false</CreatePrimaryKeyColumn>
  <MaxEntities>40000</MaxEntities>
  <KeyFormat>{0}_id</KeyFormat>
  <GeneratedKeyFormat>{0}Id</GeneratedKeyFormat>
  <CultureName>en-US</CultureName>
  <RemovePlural>true</RemovePlural>
  <CamelizeNames>true</CamelizeNames>
  <ConnectionString>Data Source=c:\temp\nwind\Nwind.accdb</ConnectionString>
</AccessImporter>
  Importers - OleDb - Task2912 : Added an OLEDB importer (for OLEDB provider that support the IDBSchemaRowset interface only).
  
Command line example:
Codefluent.import.exe "CodeFluent.Importers.Database.OleDbImporter, CodeFluent.Importers.Database" MyOleDbDatabase.Importer.xml

Xml file example:
<?xml version="1.0" encoding="utf-8"?>
<OleDbImporter>
  <Project>
 <DefaultNamespace>MyDatabase</DefaultNamespace>
 <SaveOptions>Free</SaveOptions>
 <Attributes>
   <Attribute><Name>MustCreateDefaultApplication</Name><Value>false</Value></Attribute>
   <Attribute><Name>MustCreateDefaultHints</Name><Value>false</Value></Attribute>
   <Attribute><Name>DefaultMaxLength</Name><Value>64</Value></Attribute>
   <Attribute><Name>DefaultTrackingModes</Name><Value>None</Value></Attribute>
   <Attribute><Name>DefaultConcurrencyMode</Name><Value>None</Value></Attribute>
   <Attribute><Name>DefaultPersistenceUnicode</Name><Value>true</Value></Attribute>
 </Attributes>
  </Project>
  <Entity>
 <Attributes>
   <Attribute><Name>ConcurrencyMode</Name><Value>None</Value></Attribute>
   <Attribute><Name>TrackingModes</Name><Value>None</Value></Attribute>
 </Attributes>
  </Entity>
  <CreatePrimaryKeyColumn>false</CreatePrimaryKeyColumn>
  <MaxEntities>40000</MaxEntities>
  <KeyFormat>{0}_id</KeyFormat>
  <GeneratedKeyFormat>{0}Id</GeneratedKeyFormat>
  <CultureName>en-US</CultureName>
  <RemovePlural>true</RemovePlural>
  <CamelizeNames>true</CamelizeNames>
  <ConnectionString>Provider=[OLEDB Provider name];[OLEDB Properties]</ConnectionString>
</OleDbImporter>
  Importers - SqlCe - Task2952 : Added an SQL Server Compact Edition 3.5 importer.
  
Command line example:
Codefluent.import.exe "CodeFluent.Importers.SqlServerCeImporter, CodeFluent.Importers.SqlServerCe" Northwinds.SqlServerCe.Importer.xml

Xml file example:
<?xml version="1.0" encoding="utf-8"?>
<SqlServerCeImporter>
  <Project>
 <DefaultNamespace>Northwinds</DefaultNamespace>
 <SaveOptions>Free</SaveOptions>
 <Attributes>
   <Attribute><Name>MustCreateDefaultApplication</Name><Value>false</Value></Attribute>
   <Attribute><Name>MustCreateDefaultHints</Name><Value>false</Value></Attribute>
   <Attribute><Name>DefaultMaxLength</Name><Value>64</Value></Attribute>
   <Attribute><Name>DefaultTrackingModes</Name><Value>None</Value></Attribute>
   <Attribute><Name>DefaultConcurrencyMode</Name><Value>None</Value></Attribute>
   <Attribute><Name>DefaultPersistenceUnicode</Name><Value>true</Value></Attribute>
 </Attributes>
  </Project>
  <Entity>
 <Attributes>
   <Attribute><Name>ConcurrencyMode</Name><Value>None</Value></Attribute>
   <Attribute><Name>TrackingModes</Name><Value>None</Value></Attribute>
 </Attributes>
  </Entity>
  <CreatePrimaryKeyColumn>false</CreatePrimaryKeyColumn>
  <MaxEntities>40000</MaxEntities>
  <KeyFormat>{0}_id</KeyFormat>
  <GeneratedKeyFormat>{0}Id</GeneratedKeyFormat>
  <CultureName>en-US</CultureName>
  <RemovePlural>true</RemovePlural>
  <CamelizeNames>true</CamelizeNames>
  <ConnectionString>Data Source=Northwind.sdf</ConnectionString>
</SqlServerCeImporter>
  Producers - Model - ASP.Net Providers - Task2986 : Custom MembershipUser.cs file for ASP.NET membership system is now optional.
  
By default, it is not generated. Add a boolean 'produceWebMembershipUser' attribute set to 'true' to force its generation. Note this is a breaking change, as the default was to generate it.

<cf:producer name="Model" typeName="CodeFluent.Producers.CodeDom.CodeDomProducer, CodeFluent.Producers.CodeDom">
  <cf:configuration produceWebMembershipUser="true" ... />
  Runtime - Database - Oracle - Task2925 : Added an Oracle importer.
  
Command line example:
Codefluent.import.exe "CodeFluent.Importers.Database.OracleImporter, CodeFluent.Importers.Database" HR.Oracle.Importer.xml

Xml file example:
<?xml version="1.0" encoding="utf-8"?>
<OracleImporter>
  <Project>
 <DefaultNamespace>Oracle.Hr</DefaultNamespace>
 <SaveOptions>Free</SaveOptions>
 <Attributes>
   <Attribute><Name>MustCreateDefaultApplication</Name><Value>false</Value></Attribute>
   <Attribute><Name>MustCreateDefaultHints</Name><Value>false</Value></Attribute>
   <Attribute><Name>DefaultMaxLength</Name><Value>64</Value></Attribute>
   <Attribute><Name>DefaultTrackingModes</Name><Value>None</Value></Attribute>
   <Attribute><Name>DefaultConcurrencyMode</Name><Value>None</Value></Attribute>
   <Attribute><Name>DefaultPersistenceUnicode</Name><Value>true</Value></Attribute>
 </Attributes>
  </Project>
  <Entity>
 <Attributes>
   <Attribute><Name>ConcurrencyMode</Name><Value>None</Value></Attribute>
   <Attribute><Name>TrackingModes</Name><Value>None</Value></Attribute>
 </Attributes>
  </Entity>
  <CreatePrimaryKeyColumn>false</CreatePrimaryKeyColumn>
  <MaxEntities>40000</MaxEntities>
  <KeyFormat>{0}_id</KeyFormat>
  <GeneratedKeyFormat>{0}Id</GeneratedKeyFormat>
  <CultureName>en-US</CultureName>
  <RemovePlural>true</RemovePlural>
  <CamelizeNames>true</CamelizeNames>
  <SchemaIsNamespace>false</SchemaIsNamespace>
  <ConnectionString>SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=SFSMO-ORA)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=XE)));uid=hr;pwd=hr</ConnectionString>
</OracleImporter>
Bug Fixes:
  Producers - Model - Bug2915 : The ICodeFluentGraph interface was defined but not implemented for non persistent entities.
Build 20731
 
New Features:
  Documentation - Task2635 : CodeFluent documentation is now also shipped as a .chm file.
  
The .chm file is copied in the installation directory. Note: no icon / shortcut is created in the CodeFluent start menu.
  Importers - SqlServer - Task2839 : SQL Server Importer can now add other namespaces attributes to project node.
  
Example of an importer file for AdventureWorks database. Note the defaultBindingList attribute, in the CodeDom (Model) producer namespace:

<?xml version="1.0" encoding="utf-8"?>
<SqlImporter xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Verbosity>0</Verbosity>
  <Project>
 <DefaultNamespace>AdventureWorks</DefaultNamespace>
 <SaveOptions>Free</SaveOptions>
 <Attributes>
   <Attribute><Name>MustCreateDefaultApplication</Name><Value>false</Value></Attribute>
   <Attribute><Name>MustCreateDefaultHints</Name><Value>false</Value></Attribute>
   <Attribute><Name>DefaultMaxLength</Name><Value>64</Value></Attribute>
   <Attribute><Name>DefaultTrackingModes</Name><Value>None</Value></Attribute>
   <Attribute><Name>DefaultConcurrencyMode</Name><Value>None</Value></Attribute>
   <Attribute><Name>DefaultPersistenceUnicode</Name><Value>true</Value></Attribute>
   <Attribute><Name>defaultBindingList</Name><Value>false</Value><Namespace>http://www.softfluent.com/codefluent/producers.model/2005/1</Namespace></Attribute>
 </Attributes>
  </Project>
  <Entity>
  <Attributes>
    <Attribute><Name>ConcurrencyMode</Name><Value>None</Value></Attribute>
   <Attribute><Name>TrackingModes</Name><Value>None</Value></Attribute>
 </Attributes>
  </Entity>
  <CreatePrimaryKeyColumn>false</CreatePrimaryKeyColumn>
  <MaxEntities>40000</MaxEntities>
  <KeyFormat>{0}_id</KeyFormat>
  <GeneratedKeyFormat>{0}Id</GeneratedKeyFormat>
  <CultureName>en-US</CultureName>
  <RemovePlural>true</RemovePlural>
  <CamelizeNames>true</CamelizeNames>
  <ConnectionString>server=127.0.0.1\SQL2005;database=AdventureWorks;Integrated Security=true</ConnectionString>
</SqlImporter>
  Patterns - Localization - Task2729 : The localization pattern Lcid runtime expression is now configurable.
  
A new attribute 'lcidExpression' can be added to the pattern import Xml element. The default is 'System.Threading.Thread.CurrentThread.CurrentUICulture.LCID'. The following example uses the CurrentCulture instead of the CurrentUICulture:

<cf:import ...\SoftFluent.Localization.xml" runTemplate="true" lcidExpression="System.Threading.Thread.CurrentThread.CurrentCulture.LCID" />
  Producers - Task2720 : Enhanced sharing violation detection for files to be generated has been added.
  
CodeFluent is now capable of detecting processes opening files, with exception CF1046. Example:
CodeFluentRuntimeException: CF1056: The process cannot access the file 'C:\MyModel\Model\Customer.cs' because it is being used by another process. This is list of detected processes opening this file: [WINWORD.EXE 14236].
This advanced detection requires admin rights. It requires the sysinternals HANDLE.EXE tool to be installed in the PATH. Available at http://live.sysinternals.com/
  Setup - Task2721 : Setup now defines a CF_PATTERNS_PATH variable in the cfvars.bat file.
Bug Fixes:
  Modeling - Bug2624 : The typeName="?" notation to describe nullable type may not work in some cases.
  Patterns - Localization - Bug2200 : Localization pattern method on a derived entity may fail if both the derived and the base entity declare localized properties.
  Patterns - Localization - Bug2620 : Localization pattern generated incorrect stored procedures for case sensitive databases.
  Patterns - Localization - Bug2636 : Localization pattern did not support dynamic sorts (entity 'defaultSortable' or property 'sortable' attributes).
  Patterns - Localization - Bug2730 : The localization pattern did not properly handle persistence nullable properties.
  
Note localizable properties cannot be declared as persistenceNullable (or implicitly by using the 'nullable' attribute). Previous versions actually created nullable columns which resulted in runtime database errors. This version now silently forces localizable properties not to be nullable.
  Runtime - Bug2479 : CodeFluent context connections now enlist in ambient transactions created by TransactionScope.
  Runtime - Web - Custom Controls - Bug2631 : An internal exception was raised when setting the Value property of a BinaryLargeObjectControl, with the UrlType attribute value set to Captcha.
  
The exception is now a NotSupportedException, as this combination is actually invalid.
Build 20715
 
Bug Fixes:
  Modeling - Bug2365 : Snippet containing the \ character may be misunderstood by the CodeFluent parser.
Build 20711
 
New Features:
  Producers - SharePoint - Task1306 : Windows SharePoint Producer (Alpha).
  
Example configuration:

<cf:producer name="WSS" typeName="CodeFluent.Producers.SharePoint.WebPartsProducer, CodeFluent.Producers.SharePoint">
 <cf:configuration  targetDirectory="{0}\SPWebParts"
  sharePointDirectory="\\WSS-Server\c$\Inetpub\wwwroot\wss\VirtualDirectories\80"
  connectionString="Application Name={0};server=%COMPUTERNAME%;database={0};user id=test;password=test" />
</cf:producer>
the 'sharePointDirectory' attribute must match the target WSS or MOSS virtual root.
the 'connectionString' (optional) will be used by the SharePoint generated WebParts to connect to the database.
Bug Fixes:
  Producers - Linq - Bug2206 : Many to One relations attribute were not always correctly generated.
  Producers - Linq - Bug2207 : One to One relations column attribute name was not always correctly generated.
Build 20710
 
New Features:
  Modeling - Task1289 : Added "LightWeight" Entities concept (Beta).
  
Example:
<cf:entity lightWeight="true" name="Point">
  <X typeName="int" />
  <Y typeName="int" />
</cf:entity>

Supports mapping to existing types as well:

  <cf:entity name="CultureInfo" namespace="System.Globalization" typeName="System.Globalization.CultureInfo"
   cfom:initExpression="System.Threading.Thread.CurrentThread.CurrentCulture"
   cfom:readRecordExpression="this.{0} = System.Globalization.CultureInfo.GetCultureInfo({LCID});"
   >
  <LCID defaultValue="127" />
 </cf:entity>

 <Rectangle namespace="System.Drawing, System.Drawing"> <!-- because Rectangle has a parameterless constructor and a properties matching constructor, there is no need to declare initExpression nor readRecordExpression -->
  <X />
  <Y />
  <Height />
  <Width />
 </Rectangle>

For existing entities such as CultureInfo & Rectangle, no class is generated by the CodeDom producer.

Allows simplified 1:1 asymmetric relations:
 <MyEntity>
  <Point typeName="Point" /> <!-- will store X & Y in the MyEntity table columns -->
  <Culture typeName="System.Globalization.CultureInfo" /> <!-- will store LCID in the MyEntity table columns -->
  <Rectangle typeName="System.Drawing.Rectangle" />  <!-- will store X, Y, Height & Width in the MyEntity table columns -->
 </MyEntity>
  Modeling - Task2088 : LightWeight entities can have methods (raw only).
  
Example:
 <Rectangle namespace="System.Drawing, System.Drawing" >
  <X />
  <Y />
  <Height />
  <Width />
  <cf:method name="RawMinRectangles" body="raw(int minWidth)" rawBody="select 1 as $Rectangle::X$, 2 as $Rectangle::Y$" />
  <cf:method name="LoadMinRectangles" body="load(int minWidth) raw" rawBody="select 1 as $Rectangle::X$, 2 as $Rectangle::Y$" />
 </Rectangle>
  Modeling - Task2114 : LightWeight entities can be generated from views.
  
In this exemple, a LightWeight entity is created as the result from a view. The view is itself generated as a SQL view (NOTE: the SQL producer must be configured with the attribute produceViews='true'). A custom method is defined, and since its source is this view, it will return a List of ArticleQuantity instances, instead of an ArticleCollection.

<Article>
 <Id />
 <Name />
 <Lines typeName="LineCollection" />
 <cf:method name="LoadArticlesByCommand" body="load(Command command) from ArticleQuantity where Command = @command" /> <!-- the method uses the view defined below -->
  <cf:view name="ArticleQuantity" autoLightWeight="true"> <!-- this view creates a LightWeight entity named ArticleQuantity -->
    <Id />
    <Name />
    <Quantity expression="Lines.Quantity" />
    <Command expression="Lines.Command" />
  </cf:view>
 <cf:instance><Id>1</Id><Name>Bike</Name></cf:instance>
 <cf:instance><Id>2</Id><Name>Car</Name></cf:instance>
 <cf:instance><Id>3</Id><Name>Truck</Name></cf:instance>
</Article>

<Command>
 <Id />
 <Name collectionKey="true" />
 <Lines typeName="LineCollection" />
 <cf:instance><Id>1</Id><Name>Joe</Name></cf:instance>
 <cf:instance><Id>2</Id><Name>Sam</Name></cf:instance>
 <cf:instance><Id>3</Id><Name>Bill</Name></cf:instance>
</Command>

<Line setType="List"> <!-- this is an assocation table, with a composite object key -->
 <Article typeName="Article" key="true" />
 <Command typeName="Command" key="true" />
 <Quantity typeName="int" />
 <cf:instance><Article>1</Article><Command>1</Command><Quantity>10</Quantity></cf:instance>
 <cf:instance><Article>2</Article><Command>1</Command><Quantity>20</Quantity></cf:instance>
 <cf:instance><Article>2</Article><Command>2</Command><Quantity>15</Quantity></cf:instance>
</Line>
  Patterns - Localization - Task1910 : The localization pattern SaveLocalizedValues generated methods now update the RowVersion property for concurrent entities.
  Patterns - Localization - Task2094 : The localization pattern can now optionally saves the default localized value automatically when using the Save method.
  
A new attribute 'saveDefaultLcidExpression' can be added to the pattern import Xml element. In this example, the lcid used for the test represents the machine installed UI culture:

<cf:import path="...\SoftFluent.Localization.xml" runTemplate="true" saveDefaultLcidExpression="System.Globalization.CultureInfo.InstalledUICulture.LCID" />

If defined, the expression will be directly injected into the SaveLocalizedValues() method. The expression must be compilable by the target compiler.
  Patterns - Localization - Task2128 : The localization pattern SaveLocalizedValues OnAfterSave rule is now optional.
  
A new attribute 'autoSave' can be added to the pattern import Xml element. The default is 'true'. In this example, the OnAfterSave rule is not created:

<cf:import path="...\SoftFluent.Localization.xml" runTemplate="true" autoSave="false" />
  Patterns - Localization - Task2129 : The localization pattern Lcid property name is now configurable.
  
A new attribute 'lcidPropertyName' can be added to the pattern import Xml element. The default is 'Lcid'. Example:

<cf:import path="...\SoftFluent.Localization.xml" runTemplate="true" lcidPropertyName="LocaleId" />
  Producers - Cache - Task2103 : LightWeight entities are supported by the cache producer.
  
Note: LightWeight entities generated as structs are not supported by the cache producer
  Producers - Model - Task2038 : LightWeight entities can be generated as value type (C# structs).
  
Exemple:

 <cf:entity name="Point" cfom:struct="true" lightWeight="true">
  <Latitude typeName="float" />
  <Longitude typeName="float" />
 </cf:entity>
  Producers - ServiceModel - Task2093 : LightWeight entities are supported by the WCF producer, including the CodeFluent Enhanced Proxy.
Bug Fixes:
  Modeling - CFQL - Bug2177 : Code for virtual stored procedures declared in CFQL may be incorrect when using self properties.
Build 20703
 
New Features:
  Producers - Model - Task2087 : Improved Assembly Linker (AL.EXE) .NET framework SDK detection when compiling with CodeFluent.
Build 20630
 
New Features:
  Modeling - Rules - Task2032 : Type of rule parameter values can now be specified explicitely at parsing / compile time.
  
This is done by adding an attribute suffixed with -typeName that contains the parameter target type name. How the parameter string value is converted at parsing / compile time into a value of this target type depends on the culture of the project, but will not therefore depends on the runtime culture.

Exemple:
 <Customer>
  <RebateRatio typeName="decimal">
   <cf:rule typeName="CompareValidate" operator="BetweenEqual" minimumValue="0,5" maximumValue="1,6"  maximumValue-typeName="decimal"  minimumValue-typeName="decimal" />
  </RebateRatio>
Bug Fixes:
  Patterns - DeepLoad - Bug1961 : DeepLoad pattern generated incorrect SQL text in certain cases.
  Patterns - DeepLoad - Bug1962 : DeepLoad pattern loads base entities twice.
  Patterns - Localization - Bug1960 : Object reference not set exception was thrown by the localization pattern for view properties not associated with a property.
  Patterns - Localization - Bug2031 : The SaveLocalizedValues method created by the localization pattern truncated strings to 256 characters.
Build 20624
 
Bug Fixes:
  Modeling - CFQL - Bug1892 : Generated procedure for a Many to many relation on self is sometimes incorrect.
  Patterns - Localization - Bug1886 : Localized entities are not returned when searched on a different locale than the one with which they were initially saved.
Build 20620
 
New Features:
  Modeling - Rules - Task1878 : Added a 'checkReturn' attribute on OnAfterSave entity busines rules.
  
The default value is false. Example:

  <Customer>
    <cf:rule typeName="OnAfterSave" />
  <Customer>

Will generate this for the Save() method:
        public virtual bool Save()
        {
            bool localSave = this.BaseSave(false);
            return localSave;
        }
and
  <Customer>
    <cf:rule typeName="OnAfterSave" checkReturn="true" />
  <Customer>

Will generate this for the Save() method:
        public virtual bool Save()
        {
            bool localSave = this.BaseSave(false);
            if (localSave) this.OnAfterSave();
            return localSave;
        }
Bug Fixes:
  Patterns - Localization - Bug1880 : Localization pattern relations between table and localized views are always inner joins.
Build 20619
 
New Features:
  Patterns - Task1857 : Added a DeepLoad pattern for full hierarchy loading.
  
The pattern will add a DeepLoad method to the collection class for all hierarchy base entities.

Example:
 <cf:import path="%ProgramFiles%\SoftFluent\CodeFluent\Current\Patterns\SoftFluent.HierarchyDeepLoad.xml" runTemplate="true" step="Methods" />
Bug Fixes:
  Patterns - Localization - Bug1840 : Localization pattern always enforces constraints.
  Patterns - Localization - Bug1873 : Localization pattern creates invalid Delete methods on relations.
  Patterns - Localization - Bug1874 : Localization pattern results may be incorrect if default localized values are nulls.
Build 20618
 
New Features:
  Modeling - Rules - Task1841 : Added PrincipalPermission rule to entity and method nodes to add Role authorization based on Code Access Security (CAS) role membership support.
  
Example:
  <cf:method name="MyMethod" body="load() where ..." >
    <cf:rule typeName="PrincipalPermission" authenticated="true" role="Administrators"  />
    <cf:rule typeName="PrincipalPermission" authenticated="true" role="Power users"  />
  </cf:method>
Build 20617
 
New Features:
  Modeling - Task1293 : Added OnCreate lifecycle rule to property nodes.
  
Example:
<Customer>
  <CreationDate>
   <cf:rule typeName="OnCreate" expression="System.DateTime.Now" />
  </CreationDate>
</Customer>

and

<cf:userType name="DateNow" typeName="DateTime">
   <cf:rule typeName="OnCreate" expression="System.DateTime.Now" />
</cf:userType>
  Modeling - Task1735 : Added 'createDefaultMethodForms' attribute to cf:project node, for automatic method form creation. The default is false.
  Modeling - Task1809 : Added the autoModelNullableProperties to entity and project nodes.
  
This attribute forces the 'modelNullable' attribute to true for 'nullable' value type properties in a given entity or per project.
  Producers - Linq - Task1803 : Added Linq-to-SQL mapping producer (Beta).
  
It is a sub producer of the Model producer. Configuration example:
  <cf:producer name="Model" typeName="CodeFluent.Producers.CodeDom.CodeDomProducer, CodeFluent.Producers.CodeDom">
    <cf:configuration outputName="..\bin\{0}.dll" targetDirectory="{0}\Model">
      <subProducer typeName="CodeFluent.Producers.Linq.LinqMappingProducer, CodeFluent.Producers.Linq" />
    </cf:configuration>
  </cf:producer>
  Producers - Model - ASP.Net Providers - Task1804 : Membership, Role and Profile ASP.Net providers did not support Nullable properties.
Bug Fixes:
  Producers - Model - Bug1836 : OnBeforeSet rules on project entities are not supported by the CodeDom model producer.
  Producers - WebSite - Bug1730 : Errors in WebSite templates when compiling [Template]Relation.Read.map.
Build 20606
 
New Features:
  Runtime - Web - Custom Controls - Task1494 : Added generic EnumDropDownList and EnumCheckBoxList ASP.Net custom controls to display runtime Enum.
  
Usage examples:

<%@ Register TagPrefix="cf" Namespace="CodeFluent.Runtime.Web.UI.WebControls" Assembly="CodeFluent.Runtime.Web" %>
<cf:EnumDropDownList runat="server" EnumTypeName="System.DayOfWeek" Value="Thursday" SortExpression="Value" />
<cf:EnumCheckBoxList runat="server" EnumTypeName="System.UriComponents" Value="StrongAuthority" DecamelizeOptions="Default" />
Build 20603
 
Bug Fixes:
  Producers - SqlServer - Bug1322 : AccessViolationException occurs when trying to use the importer on Windows Vista.
  
This is due to a regression in foreach handling with COM objects under Windows Vista. see here  http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=330906
Build 20602
 
Bug Fixes:
  Producers - SqlServer - Bug1322 : AccessViolationException occurs when trying to use the importer on Windows Vista.
  
This is due to a regression in foreach handling with COM objects under Windows Vista. see here  http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=330906
Build 20602
 
New Features:
  Modeling - Task1318 : Forms nodes can be modeled under Methods nodes.
  
exemple:
<cf:method name="LoadByNameAndAge" body="load(string name, int age) where Name = @name and Age > @age">
  <cf:form name="Custom">
    <cf:tab name="General">
      <cf:column>
        <cf:field name="name" />
      </cf:column>
      <cf:column>
        <cf:field name="age" />
      </cf:column>
    </cf:tab>
  </cf:form>
</cf:method>
Bug Fixes:
  Modeling - Bug1294 : The 'formatBody' attribute does not work on snippets.
  Modeling - Bug1297 : Relations between properties of entities with the same name but in different namespaces are not understood by the parser.
  Producers - SqlServer - Bug1298 : Views and Schemas are not fully supported with SQL Server 2000.
  Producers - SqlServer - Bug1299 : Runtime .sql script file was incorrect with SQL Server 2000.
Build 20523
 
New Features:
  Producers - ServiceModel - Task1286 : Added helper methods for global WCF channel closing.
  
Added Reset() and SafeClose() methods to CodeFluent's Enhanced Proxy WcfClient and WcfBinaryClient inner classes.
Added CodeFluent.Runtime.ServiceModel.ServiceModelUtilities.ISafeClosable interface implementation for these classes.
Added the SafeClosables field to the Constants generated class.

This allows a global safe close (especially for NetTcpBinding usage). Exemple:
CodeFluent.Runtime.ServiceModel.ServiceModelUtilities.SafeClose(SoftFluent.CarRental.Proxy.Constants.SafeClosables);
  Runtime - ServiceModel - Task1287 : Added helper methods for global WCF channel closing.
  
Added helper methods for global WCF channel closing.

/// Safely closes an array of clients.
public static void SafeClose(ISafeClosable[] closables)

/// Safely closes a list of clients.
public static void SafeClose(IEnumerable<ISafeClosable> closables)

/// Safely closes a WCF client. See http://msdn.microsoft.com/en-us/library/aa355056.aspx for more information.
public static Exception SafeClose<T>(ClientBase<T> client) where T : class

/// Safely closes a WCF client. See http://msdn.microsoft.com/en-us/library/aa355056.aspx for more information.
public static Exception SafeClose<T>(ClientBase<T> client, bool throwOnException) where T: class