20080602: History is now located here: http://www.codefluent.com/builds/history.htm This file will not be update any more. Below, you will find previous history. The CodeFluent support team. --------------------------------------------------------------- 20080516: New features: * Producteur Model: possibilité d'ajouter des using au code C# généré à l'aide de l'attribut namespaceImports (liste de namespaces séparés par une virgule) à déclarer dans la configuration du CodeDom producer. exemple: Bug Fixes: * Producteur Model: l'utilisation des options GroupXXX avec l'attribut targetProductionOptions empêchait la génération de fichiers protégés en écriture. * Producteur WCF: EntityState est dorénavant sérialisé par le membre privé (et non plus public) 20080505: New features: * Model: les méthodes SEARCH prennent dorénavant en charge les opérations de type IN. * Model: ajout de vérification sur les types de noeuds présents dans le noeud de type . Dorénavant, par exemple, un noeud de type ne sera plus autorisé dans cf:project. * Localization Pattern: les méthodes COUNT sont dorénavant prises en charge. * Model: le moteur de template de CodeFluent peut dorénavant utiliser le compilateur C# 3.5 (et donc les méthodes d'extensions, Linq, etc...). Il faut spécifier des 'codedom provider options' (CodeDom étant la technologie sous jacente au moteur de Template CodeFluent). Les 'codedom provider options' sont formalisées par une chaîne de caractère similaire à une chaîne de connection de base de données. Cette chaîne est à préciser à un endroit qui varie le mode de réutilisation du moteur de template. Au niveau du moteur lui même, on peut specifier Template.DefaultProviderOptions. Dans un template, on peut spécifier un attribut 'providerOptions' dans la directive @ template. Au niveau de la déclaration d'un producteur CodeFluent (CodeDomProducer, TemplateProducer, ...), on peut utiliser l'attribut 'codeDomProviderOptions'. Au niveau d'un projet CodeFluent, on peut spécifier l'attribut 'defaultCodeDomProviderOptions' au niveau du noeud projet pour que tous les producteurs de type CodeDom utilisent des options communes. Exemple: Exemple dans un template Xml: * Model: quatre rules sur entité sont ajoutées: OnDeserializing, OnDeserialized, OnSerializing, OnSerialized. Elles permettent d'appeler une méthode lors des évènements de sérialisation associés. Utile essentiellement en environnement SOA (WCF). exemple spécifie: private void OnDeserializing(System.Runtime.Serialization.StreamingContext context){...} private void OnDeserialized(System.Runtime.Serialization.StreamingContext context){...} private void OnSerializing(System.Runtime.Serialization.StreamingContext context){...} private void OnSerialized(System.Runtime.Serialization.StreamingContext context){...} Bug Fixes: * Model: l'attribut usePersistenceDefaultValue n'était pas systématiquement pris en compte quand déclaré sur un noeud de type à l'intérieur d'une méthode. * Producteur WCF: le champ _raisePropertyChangedEvents n'était pas mis à true dans la méthode OnDeserializing. * Runtime: Validate(CultureInfo) n'était plus appelé lors d'un save. Breaking Changes: * Runtime: le paramètre Argument pour l'évènement CodeFluentEntityActionEventArgs / CodeFluentEntityAction.Validated ne contient plus un booléen égal à false, mais un objet de type IList. * Runtime: le paramètre Argument pour l'évènement CodeFluentEntityActionEventArgs / CodeFluentEntityAction.Validating n'est plus null mais contient un objet de type IList. 20080424: Bug Fixes: * Runtime: correction pour l'utilisation des méthodes de type load avec un paramètre de type string[] dans le cas particulier de l'utilisation de l'attribut defaultUsePersistenceDefaultValue="false" au niveau projet 20080418: Bug Fixes: * Model: correction de la regression des relations entre entités dérivées (regression dûe aux nouvelles fonctions de vues persistentes, pour le pattern de localisation V2). 20080417: Bug Fixes: * Model: correction de la regression sur l'utilisation des membres privés pour l'implémentation de CheckChanged sur les propriétés (regression dûe à la modification du comportement des relations OneToOne). New features: * Producteur Model: ajout de la possibilité de créer les fichiers .cs de trois manières en rajoutant l'attribut targetProductionOptions au niveau de la configuration du producteur model. Il peut prendre les valeurs suivantes: GroupTypesPerDirectory : les fichiers entity/set/enumeration sont groupés au niveau de chaque repertoire cible GroupTypesPerTargetDirectory : tous les fichiers entity/set/enumeration sont groupés au niveau du répertoire cible racine GroupSplitByNodeType : les fichiers entity/set/enumeration sont groupés par type de noeud au niveau de chaque repertoire cible (uniquement si GroupTypesPerDirectory) GroupWebTypes: les fichiers web (MembershipProvider, RoleProvider, BitsServer, BasicAuthenticationModule et ProfileProvider) sont groupés aussi GroupRuntimeFiles: les fichiers runtime (_cf_rt.cs) sont groupés aussi CreateTempFile: un fichier temporaire est utilisé (peut nuire à la performance dans le cas des groupes) OneFilePerDirectory: GroupWebTypes | GroupTypesPerDirectory | GroupRuntimeFiles OneFile: GroupWebTypes | GroupTypesPerTargetDirectory | GroupRuntimeFiles Default: None | CreateTempFile 20080416: New features: * Model: ajout de la possibilité de ne pas synchroniser les relations OneToOne dans la couche de persistence, au niveau projet. il faut déclarer l'attribut defaultRelationSynchronize (de type booléen) à false. Bug Fixes: * Model: les rapports d'erreur automatiques de CodeFluent ne fonctionnaient plus. * Producteur SQL: la clause WHERE des méthodes search générées comprenait systématiquement les paramètres nullables. 20080415: New features: * Producteur Model: les règles de type OnAfterSet sont dorénavant prises en charge pour les propriétés de type relation. Attention, pour une règle de ce genre, il faut fournir une implémentation pour l'objet de la relation, et une pour chaque clé (donc au minimum deux, pour une clé non composite). * Model: ajout de la possibilité de ne pas synchroniser les relations OneToOne dans la couche de persistence. il faut déclarer l'attribut relationSynchronize (de type booléen) à false, sur un des cotés de la relation. Exemple: Bug Fixes: * Producteur SQL: une contrainte n'est pas créee par défaut si les table référencées ne sont pas créees. 20080414: Breaking Changes: * Producteur Model: l'affectation des relations OneToOne peut être symmétrique. * Producteur Model: l'entity state n'est pas modifié si on essayer de lui affecter la valeur modified, et qu'il est dans l'état Created Bug Fixes: * Localization Pattern: les load sur un thread donné fonctionnent pour les entités dérivées, dans le cas où la valeur localisée existe pour un autre thread (cf précententes Known Issues) * Runtime: ValidateMember était appelé deux fois lors d'un save. 20080411: New features: * Runtime: ajout d'un attribut commandTimeout (en secondes) dans la configuration runtime, correspondant au timeout de command ADO.Net à utiliser. Le défaut est 30 (secondes). * Producteur Model: les classes générées MembershipProvider, RoleProvider, BitsServer, BasicAuthenticationModule et ProfileProvider sont dorénavant marquées comme partielles. * Producteur SQL: possibilité de générer des procédures stockées sans générer la table associée. il faut définir l'attribut produceTable (de type booléen) à false, dans le namespace du producteur SQL. * Localization Pattern: par défaut, les méthodes CFQL utilisant des relations sur des propriétés localisables sont implicitement modifiées pour utiliser les valeurs localisables. Exemple: Bug Fixes: * Localization Pattern: le Save de l'entité n'écrase plus les valeurs par défaut avec les valeurs du thread courant. * Localization Pattern: les load sur un thread donné ne fonctionnaient pas dans le cas où la valeur localisée existait pour un autre thread. Le problème subsiste pour les entités dérivées (cf known issues) Known issues: * Localization Pattern: les load sur un thread donné ne fonctionnent pas (ne renvoient rien) dans le cas où la valeur localisée existe pour un autre thread, pour une entité dérivée. 20080409: New features: * Model: possibilité de réutiliser les noms d'entités et propriétés au sein de code snippet ou de raw CFQL, ce qui permet d'utiliser les noms finaux des tables, colonnes et vues, avec prise en charge de conventions de nommage spécifiques. Les formats possibles sont: $(entity name)$ -> nom de table $(entity name)::(property name)$ -> nom de colonne $(entity name):(view name)$ -> nom de vue $(entity name):(view name):(property name)$ -> nom de colonne de vue deviendra SELECT ... WHERE DATEDIFF(day, [tbl_cus].[dt], @offset) < 30 * Model: définition d'un nouvel attribut defaultInheritsPropertyMessages de type booléan, au niveau projet, dont la valeur est True par défaut permettant de ne pas créer de messages sur les propriétés de vues automatiquement à partir des messages sur les propriétés d'entité, en le définissant à false. * Model: possibilité d'utiliser des paramètres de type tableau de chaînes dans les méthodes de type load. Cela permet de réaliser des traitements non standard en SQL. Exemple. * Model: création de l'attribut constraintShortName (de type string) permettant de définir le nom court (utilisé par le producteur SQL Serveur) des contraintes. Il peut être utilisé sur les clés primaires, étrangères, uniques. Exemple: * Producteur SQL: possibilité de ne pas créer une contrainte en spécifiant produce="false" dans le namespace spécifique du procuteur SQL. Exemple: Bug Fixes: * Model: correction du problème CFQL de "missing join" sur des relations ManyToOne avec des propriétés de tables de base. 20080401: Bug Fixes: * Producteur WCF: les entités dérivées avec une concurrency mode devaient être rechargées pour être sauvegardées deux fois de suite. New features: * Model: des annotations ont été apportées dans le schema CodeFluent afin d'améliorer l'expérience utilisateur au niveau de l'intellisense de Visual Studio. 20080327: New features: * Producteur SQL Server: ajout de l'attribut createRelationsDrop de type booléen pour permettre de créer le script relations_drop.sql même si createDiffs est à false. 20080327: New features (en test): * Model: ajout des méthodes "search". * Model: ajout de la notion de vue persistentes. * Model: ajout de la notion de paramètres ambiants. * Producteur SQL Server: prise en charge de la génération des méthodes search. * Producteur SQL Server: prise en charge de la génération des vues persistentes. 20080321: New features: * Model: ajout de l'attribut defaultBaseEqualsOverride au niveau project, et baseEqualsOverride au niveau entity. * Model: ajout de l'attribut allowDefaultMethodsOverride au niveau project, entity ou method. * Producteur Model: possibilité de générer la méthode ToType de manière dynamique avec toTypeImplementationMode="dynamic" dans le namespace du producteur CodeDom, sur le noeud entité. Bug Fixes: * Producteur Model: ajout de l'attribut NonSerialized sur les champs de type BindingListManager, ce qui permet d'éviter une erreur si on souhaite sérialiser les collections. 20080319: New features: * Runtime: ajout des options NullAllowed et EmptyAllowed au CompareValidate. exemple: 20080317: New features: * Model: ajout d'un attribut createDefaultForms de type booléen (par défaut à true) sur le noeud cf:project. * Model: ajout d'un attribut createDefaultViews de type booléen (par défaut à true) sur le noeud cf:project. * Producteur Model: ajout d'un attribut "bindingList" de type booléen (par défaut à true) dans le namespace du producteur CodeDom. Permet de ne pas avoir de BindingList. Peut être défini au niveau projet ("defaultBindingList") * Producteur WCF: ajout d'un attribut "bindingList" de type booléen (par défaut à false) dans le namespace du producteur ServiceModel. Permet de ne pas avoir de BindingList. Peut être défini au niveau projet ("defaultBindingList") Bug fixes: * Producteur WCF: Correction des méthodes Clone de collections dans le cas ou deep=true. L'erreur était CF1056: Calling base methods is not allowed. * Producteur Model: Correction de divers problèmes mineurs de l'implémentation de IBindinList dans les cas WinForms, WFP, Xceed. 20080312: New features: * Runtime: les collections implémentent IBindingList. * Runtime WCF: les collections implémentent IBindingList. * Model: ajout d'une rule OnAddNew permettant d'influer sur la création de l'objet lors de l'appel de la méthode IBindingList.AddNew. exemple: * Producteur WCF: possibilité de ne pas créer une propriété dans le proxy WCF. Il suffit d'ajouter cfsm:enabled="true" sur la propriété. * Producteur WCF: possibilité de translater le type d'une propriété dans le proxy WCF. Exemple: NOTE: Attention, si la propriété est marquée comme étant un dataMember, il faut que les contrats de sérialisation induits soient équivalents. Breaking changes: * Model: le parsing des valeurs typées dans le modèle CodeFluent tient compte dorénavant de la culture définie au niveau projet. Cela signifie par exemple que des valeurs d'instances ou par défaut sujettes à la culture (comme les chiffres à virgules, les dates, ...) peuvent ne plus être comprises de la même manière. La culture au niveau projet se spécifie par les attributs cultureName et uiCultureName. Pour les instances, il est possible de forcer la culture de parsing en spécifiant l'attribut cultureName. Exemple: Known issues: * Runtime & WCF runtime: il faut pour l'instant déclarer RaiseListChangedEvents = false sur les collections pour contourner un bug de WPF. cf ici: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2968196&SiteID=1 Bug fixes: * Runtime: Le Save n'appelait plus la validation de l'entité, uniquement la validation des membres. * Producteur Model: certains types ne fonctionnaient pas correctement avec modelNullable, par exemple DateTime. * Producteur WCF: correction de la sérialisation par défaut des propriétés de type enum dont la valeur par défaut n'est pas la même que celle de la CLR. * Importer SQL: correction d'un problème de type des colonnes avec clés étrangères. 20080222: New features: * Model & Producteurs & Runtime: possibilité de déclarer des propriétés "modelNullable". "modelNullable" implique "nullable" par défaut. L'impact est limité au code .NET. Le type CLR devient Nullable, et les notions de valeur par défaut ne sont plus utilisées vis à vis de la base de données ("usePersistenceDefaultValue, etc...). Elles le sont toujours dans le code .NET, dans le constructeur notamment. Si "defaultValue" n'est pas spécifié sur la propriété, la valeur par défaut en .NET est null. Exemple de notations: dans le code .NET: customer.MyNullableBool = true; // -> True en base de données customer.MyNullableBool = false; // -> False en base de données customer.MyNullableBool = null; // -> Null en base de données Bug fixes: * Model: ajout de dataMember dans le schema CodeFluent. 20080219: New features: * Runtime: les paramètres des validateurs (StringValidate, etc...) sont modifiables à l'exécution. * Producteur Model: possibilité de créer des classes .NET abstraites (aucun changement en base de données) par l'attribut abstract="true" sur l'entité. * Producteur Model: les méthodes de type rule() prennent en charge les règles de type Transaction () * Producteur Model: les méthodes de type rule() externes peuvent être implémentées par une méthode typée. Exemple: implémentation dans la classe: namespace MyNamespace { public class MyClass { public void MyRule(Country c, Region r, string s, int i) { ... } } NOTE: le nom des paramètres n'est pas important, mais l'ordre si. Le type peut ne pas correspondre strictement, il faut qu'il soit Assignable. On peut par exemple mettre object à la place de Region ou Country (ou un sous type). * Producteur Service Model: possibilité de supprimer des méthodes des interfaces de services, avec l'attribut enabled=false dans le namespace du producteur ServiceModel. L'implémentation du coté proxy renvoie un NotSupportedException(). Exemple: Bug fixes: * Producteur Model: les transactions de type TransactionScope avec timeout n'étaient pas générées ("Invalid Primitive Type"). * Producteur Model: les Rule wrappers (générés par ) étaient placés après les règles de types OnAfterCreate * Error Reporting: correction du bug de l'envoi du "dernier report". 20080207: New features: * Model: ajout d'une rule typeName="transaction". Peut être placée sur le projet, une entité ou une méthode (avec héritage implicite). Il n'y a pas de report dans le proxy WCF. Exemples: ... Bug fixes: * Import Sql Server: correction de problèmes de fonctionnement généraux. * Runtime: correction d'un problème sur le GetInputStream(...) des BinaryLargeObjects si cacheEnabled est à false. 20080205: Breaking changes: * Model: l'implémentation de toutes les collections de noeuds du modèle CodeFluent (ex: Project.Entites, Entity.Properties, Entity.Methodes...) ont été modifiées. Il faut donc éventuellement recompiler des applications tierces qui les utiliseraient. * Model: les Méthodes Sort(IComparer comparer) de toutes ces mêmes collections sont remplacées par Sort(IComparer comparer) * Model: les naming convention DecamelizeXXX conservent par défaut les chiffres collés aux lettres. On peut modifier ce comportement par un attribut au niveau projet: namingConventionDecamelizeOptions. Il doit correspondre à une combinaison des valeurs de l'enumération CodeFluent.Runtime.Utilities.ConvertUtilities+DecamelizeOptions. Bug fixes: * Runtime: Correction d'un problème de stackoverflow dans les classes proxy générées par le producteur WCF à la validation * Runtime: Correction d'un problème de conversion de BinaryLargeObject vers Image (classe CodeFluent.Runtime.Design.BinaryLargeObjectValueConverter) New features: * Producteur WCF: ajout de deux attributs booléens sur l'élement subProducer, permettant de définir si les rules et snippets sont activés par défaut ou pas: defaultEnableAllRules, et defaultEnableAllSnippets. Exemple: * Model: ajout de deux rules de type EntityEvent: OnBeforeValidateMember, et OnAfterValidateMember, prises en charge par les producteurs Model et WCF. Elles permettent de s'insérer dans la méthode ValidateMember. Exemple: private void MyValidate(System.Globalization.CultureInfo culture, string memberName, System.Collections.Generic.IList results){...} * Model: ajout de la convention de nommage DecamelizeNamingConvention (qui ne fait ni upper ni lower). Exemple: Known issues: * Import Sql Server: ne fonctionne plus (Erreur CF0222 ou Object Reference Not Set). Workaround: utiliser les anciennes builds pour importer, puis les nouvelles pour générer. 20080201: New features: * Model: ajout de l'attribut 'schema' sur les enumérations. * Model: ajout de classes de naming convention spécifiques: A) CodeFluent.Model.Naming.FormatNamingConvention utilise les attributs sur le noeud projet tableFormat,procedureFormat,parameterFormat,columnFormat,constraintShortNameFormat et constraintFullNameFormat. Chaque attribut peut utiliser {0} qui est égal à la valeur préparée par CodeFluent. B) CodeFluent.Model.Naming.LowerCaseNamingConvention permet de passer tous les objets de base de données en lowercase C) CodeFluent.Model.Naming.UpperCaseNamingConvention permet de passer tous les objets de base de données en uppercase D) CodeFluent.Model.Naming.DecamelizeLowerCaseNamingConvention permet de passer tous les objets de base de données en lowercase et décamelizés (ProductSku -> product_sku) E) CodeFluent.Model.Naming.DecamelizeUpperCaseNamingConvention permet de passer tous les objets de base de données en uppercase et décamelizés (ProductSku -> PRODUCT_SKU) * Model: ajout de la génération de commentaires dans les classes C# générées, en utilisant la classe de messages _doc. Prise en charge sur les entités, les propriétés et les méthodes. Par exemple: Defines the customer class. for more info. Gets or Sets my File Load custom things The first parameter. A collection of things. Note: Si n'est pas défini, il sera ajouté automatiquement. Breaking changes: * Model: l'implémentation des collections d'entités et propriétés (ex: Project.Entities, Entity.Properties, ...) ont été modifiées. Il faut donc éventuellement recompiler des applications tierces qui les utiliseraient. * Model: les Méthodes Sort(IComparer comparer) sont remplacées par Sort(IComparer comparer); 20080128: Bug fixes: * Runtime ServiceHost: Correction d'un problème de cpu en mode service * Producteur Model: Correction du problème de compilation si visual studio 2008 n'est pas installé Known issues: * Producteur Model: les collections implémentant maintenant INotifyCollectionChanged (si targetFramework est 3.0 ou plus), il faut ajouter une référence à l'assembly WindowsBase du .NET Framework 3.0 dans les projets Visual Studio (non compilés avec CodeFluent). 20080123: New Features: * Model: création de l'attribut defaultTargetFramework sur l'élément project, et targetFramework sur l'élément configuration des producteurs CodeDom. Par défaut il est égal à 3.0 si le framework 3.0 ou plus est installé sur la machine, sinon il est égal à 2.0. Exemple force le framework 2.0 * Producteur Model: si le target framework est 3.0 ou plus, les classes de collections implémentent dorénavant INotifyCollectionChanged (pour le binding automatique WPF) 20080122: Breaking changes: * Producteur Model: les méthodes Contains et IndexOf de l'implémentation interne de IList ne jettent plus d'exception ArgumentNullException mais renvoient false et -1 respectivement si l'argument est null. 20080121: Breaking changes: * Producteur Model: les méthodes Contains et IndexOf de l'implémentation de IList ne jettent plus d'exception ArgumentNullException mais renvoient false et -1 respectivement si l'argument est null. 20080117: Breaking changes: * Producteur SQL Server: les clés primaires ne sont plus des clés CLUSTERED par défaut. Rappel: pour déclarer une clé CLUSTERED, il faut ajouter un hint à la propriété, ex: avec cfps étant le préfixe correspondant au namespace du producteur SQL Server. Bug fixes: * Model: Correction d'un problème de construction des procédures stockées virtuelles, dans certains cas de méthodes d'entités dérivées, avec un paramètre étant une propriété de la classe de base New features: * Runtime: ajout d'une classe utilitaire CodeFluent.Runtime.DistinctDictionary permettant de stocker ou extraire les valeurs distinctes d'une liste. * Producteur Model: ajout de l'implémentation de IDataErrorInfo dans les classes d'entités * Producteur Model: ajout de l'implémentation de INotifyPropertyChanged dans les classes de collections (changement des propriétés "Count" et "Item[]") * Producteur WCF: ajout de l'implémentation de IDataErrorInfo dans les classes proxy d'entités 20080104: New features: * Producteur SQL Server: ajout de templates pour la création d'indexes (disponible dans le répertoire %ProgramFiles%\SoftFluent\CodeFluent\Templates\SqlServer * Producteur SQL Server: ajout de la possibilité de créer des hints sur les clés primaires (auparavant, cela ne marchait que pour les clés uniques). 20080102: Bug fixes: * Runtime WCF: Correction d'un problème de chargement des ComboBox WPF avec le résultat d'appels de méthodes LoadAll. Dorénavant, le code suivant fonctionne: myWpfCombo.ItemsSource = CustomerCollection.LoadAll(); New features: * Runtime ServiceHost: ajout d'une méthode DetachedMain permettant d'attendre que les services soient démarrés, avec un timeout. ex: DetachedMain(args, true, 10000) attends 10 secondes maximum. 20071213: New features: * Producteur templates SQL Server: permet de lancer des scripts SQL par DMO/SMO sous la forme de templates CodeFluent. Permet de crée des objets SQL non couverts directement par CodeFluent (UDT, Indexes de performance, etc...). Par exemple Si le répertoire SQLTemplates contient des fichiers .SQL, ils seront exécutés après avoir été transformés par le moteur de templates. * Producteur WCF: prise en charge des propriétés déclarées protected="true" * Model: CodeFluent considère dorénavant qu'une propriété avec computed="true" définit aussi implicitement relationType="None" * Model: possibilité de ne pas charger les imports avec runTemplate="true" dans le projet à l'aide de l'attribut "loadOptions" sur l'élement projet. Défini par: None = 0x0000, DisableProducers = 0x0002, DisableImports = 0x0004, AutoDisableImports = 0x0008, ShowFullNames = 0x1000, ShowFullNamesWithTypes = 0x2000, DontHandleExceptions = 0x4000, DisableTemplateImports = 0x8000, Overwrite = 0x10000, Default = None | ShowFullNamesWithTypes, * Runtime: ajout d'évènements sur les BinaryLargeObjects (Streaming et Action). * Producteur Model: prise en charge de l'évènement onAfterSet sur les propriétés de type blob. Création d'un évènement onAction, disponible uniquement sur les blobs actuellement. Breaking changes: * Producteur Model: les collections d'entités dérivées ne dérivent plus de la collection de l'entité de base. Nécessaire pour que la sérialisation WCF fonctionne correctement, car il n'est pas capable de sérialiser une classe dérivant de deux implémentations de IList<>. * Producteur WCF: les collections d'entités dérivées ne dérivent plus de la collection de l'entité de base. Nécessaire pour que la sérialisation WCF fonctionne correctement, car il n'est pas capable de sérialiser une classe dérivant de deux implémentations de IList<>. * Model: CodeFluent considère dorénavant qu'une propriété avec computed="true" définit aussi implicitement relationType="None" (c'est aussi une feature). Bug fixes: * Producteur WCF: la sérialisation de collections d'entités dérivées fonctionne (cf Breaking Changes). 20071205: New features: * Model: ajout de l'attribut collectionKeyComparer aux éléments de type entité. Dans le cas des collectionKeys de type string, permet de spécifier si le dictionnaire derrière l'index est case insensitive. ex: * Model: les projets importés (par cf:import) utilisent automatiquement de defaultTypeNamespace du projet importeur. Ceci permet de régler les problèmes dûs aux projets combinants des namespace implicites (defaultTypeNamespace) et des namespaces explicites (par exemple dans le pattern de localisation). Bug fixes: * Producteur Model: le producteur CodeDom ne supportait pas tous les types de convention de nommage spécifiques au niveau persistence. * Producteur WCF: les attributs de sérialisation des propriétés de type bool n'étaient pas correctement définis (EmitDefaultValue=false ne fonctionne pas avec un bool, car la valeur devient alors toujours true). 20071128: Bug fixes: * Producteur SQL: le moteur de différences n'effaçait pas les tables dans un schéma non standard. 20071127: Bug fixes: * Producteur Model: ajout d'un commitShadow dans ReadRecord pour les propriétés ModelHistory * Producteur Model: une entitée dérivée dont la base était déclarée après provoquait une faute New features: * Model: ajout du type de relation Embedded. Permet d'embarquer complètement une définition d'entité dans une autre. ex:
* Model: ajout de la propriété LastUserAgent comme possibilité de directoryPropertyType sur User. Utilisée comme LastIP. ex: ... * Model: ajout de règles de validation sur les propriétés. StringValidate, RegularExpressionValidate, CompareValidate. ex: * Producteur Model: prise en charge des règles simples StringValidator, RegularExpressionValidator, CompareValidator. * Producteur WCF: prise en charge des règles simples StringValidator, RegularExpressionValidator, CompareValidator. * Producteur Model: pour le producteur C#, les méthodes Equals utilisent un as (snippet) à la place d'un cast. * Producteur WCF: pour le producteur C#, les méthodes Equals utilisent un as (snippet) à la place d'un cast. * Producteur Model: prise en charge de TrackingModes = ModelHistory pour les relations de type 1:1 * Producteur WCF: prise en charge de TrackingModes = ModelHistory pour les relations de type 1:1 * Producteur WCF: création des méthodes ToType() et ToXXX() pour les classes dérivées. * Producteur WCF: possibilité d'avoir les OnGetEvent dans le proxy par cfsm:enabled=true. * Meta Model Explorer: possibilité d'extraire le schéma dans VS 2008 Breaking changes: * Model: les rules de type event sur les propriétés et entités ont été renommées avec On en prefixe. ex avant: ex: maintenant 20071119: Bug fixes: * Producteur Model: bug dans le code des CopyTo. 20071116: Bug fixes: * Producteur SQL: problème de génération avec plusieurs stores (skipCrossStoreRelations). New features: * Runtime ServiceHost: modifications interne de gestion de la console pour faciliter le debugging des services en étant totalement inprocess (client + serveur). Nouvelle méthode MainDetach qui crée un thread. La gestion des arguments a été modifiée (utilise les paramètres du main) De plus, si le process hébergeant passe l'argument /nocfrthost, ou l'appSettings nocfrthost=true, alors rien ne se passe, ce qui permet de changer le comportement (serveur externe) sans recompiler De plus, servicehost se termine tout seul si le thread appelant disparait * Producteur WCF: les méthodes validate peuvent s'exécuter sur le proxy ou sur le serveur dorénavant. 20071115: Bug fixes: * Producteur Model: les méthodes CopyTo/CopyFrom ne contenaient plus les clés des entités reliées. * Producteur Model: le code de lazy loading des collections posait un problème dans le cas où l'entité venait d'être crée. * Model: des entités dérivées en mode concurrencyMode=none ne se sauvegardaient pas correctement * Producteur SQL: useLocalTransactions=false provoquait une erreur de syntaxe dans le code des procédures stockées New features: * Model: création de l'attribut trackingModes sur propriété (ModelRaiseChanged, CheckChanged, ModelHistory, PersistenceHistory, ChangeState). Default= ModelRaiseChanged | ChangeState. PersistenceHistory n'est pas pour l'instant supporté. ModelRaiseChanged permet d'appeler OnPropertyChanged (par défaut). ChangeState permet de changer l'entityState (par défaut). CheckChanged permet de ne changer que si la nouvelle valeur est différente. ModelHistory crée une propriété (xxxShadow) contenant la vieille valeur de la propriété. * Model: persistenceEnforce peut être déclaré d'un seul coté de la relation. création de defaultPersistenceEnforce sur entité & projet * Model: possibilité de déclarer un paramètre nullable dans CFQL directement, ex: . est equivalent à rajouter * Model: ajout de la notion de WellKnownMethod (Save, ...). Permet de déclarer des attributs sur ces méthodes. * ActiveX WSSLists (Excel 2007 Sync): nouvelle version conservant le même process Excel avec différents workbooks. http://www.softfluent.com/wsslists.htm * Runtime Office: une évènement est crée dans le journal des évènements Windows en cas de mise à jour qui pose problème (Excel lui-même ne remonte rien) * Runtime: ajout d'une fonction de retry (une seule fois) pour masquer les problèmes de connexion pooling ADO.Net lorsqu'on redémarre le serveur de base de données par exemple. désactivable par clearPoolsOnException=false dans la configuration de contexte. * Runtime: ajout d'une fonction TransactedSave dans CodeFluent.Runtime.CodeFluentPersistence permettant de persister d'un coup plusieurs objets de manière transactionnelle (en conservant EntityState & RowVersion si un rollback survient). * Runtime ServiceHost: possibilité d'appuyer sur C pour effacer l'écran (mode console) * Runtime ServiceHost: possibilité de tracer les exceptions WCF sur l'écran (mode console) en rajoutant un listener (CFTL - inclus dans les templates) * Producteur Model & WCF: possibilité de définir des custom attributes spécifiques au modèle ou au proxy. ex: 20071026: New features: * Producteur WCF: le paging des collection est supporté à la génération. les attributs pageSize, pageCount et pageSearchStep sont donc supportés. C'est aussi le cas dans le producteur model, mais lui n'en fait rien car il n'utilise pas les collections dynamiques. * Producteur Web Service: les SaveByRef sont générés pour toutes les entités avec concurrencyMode=Optimistic ou si la clé est de type identity. * Producteur WCF: les SaveByRef sont générés pour toutes les entités avec concurrencyMode=Optimistic ou si la clé est de type identity. * Runtime: CodeFluentUser utilise dorénavant par défaut Thread.CurrentPrincipal avant Windows/ASP.NET, mais cela peut se configurer au niveau contexte. * Model: réutilisation des champs de tracking (_track...). On peut déclarer une propriété de la manière suivante: Bug fixes: * Runtime WCF: Les collections paginées provoquaient un NullReferenceException. * Producteur Model: le readOnSave n'était pas géré si la propriété n'était pas persistente. 20071024: Bug fixes: * Runtime WCF: Les collections non paginées provoquaient un NullReferenceException. 20071023: New features: * Runtime WCF: les collections des proxy WCF sont potentiellement dynamiques (chargement avec des threads en background). Pour cela il faut utiliser pageSize/pageCount/pageSearchStep * Producteur WCF: le Load(bykey) renvoie null si les clés ne sont pas définies * Producteur WCF: le LoadByEntityKey renvoie null si entityKey = string.empty * Producteur Model: le LoadByEntityKey renvoie null si entityKey = string.empty Bug fixes: * Runtime WCF: Les pages de collection au dessus de l'index 0 étaient décalées de 1. * Producteur Model: les propriétés de type collection ou entity déclarées avec includeInSerialization empêchaient la compilation. Déclarer le producteur WCF réglait le problème. * Producteur WCF: la modélisation de paramètre nullable=true est prise en charge dans le proxy (pas de throw) 20071019: Breaking changes: * Producteur WCF: Les méthodes Validate utilisent une string pour la culture (évite la sérialisation de CultureInfo). New features: * Producteur WCF: ajout d'évènements de type CodeDomProduction à chaque étape de la construction. permet de ne pas dériver de ServiceModel dans certains cas. * Runtime: création d'une classe CustomThreadPool configurable permettant de ne pas utiliser tout le temps le même thread pool de .NET (déjà bien pris par ailleurs: WPF, BeginXXX, AsyncXXX, ...) 20071016: Bug fixes: * Producteur WCF: les méthodes Clear, Insert, Remove et RemoveAt des collections proxy était défaillantes. * Producteur WCF: le SaveAll ne fonctionnait pas à l'appel du channel WCF. New features: * Model: ajout de l'attribut persistenceNullable. Permet de dissocier le nullable de propriété (nullable) et de persistence (persistenceNullable) * Model: cloneMode a été remanié pour les entités et les propriétés. cf le schema. Breaking changes: * Producteur Model: Equals retournait false pour la même entité si elle n'était pas initialisée. (Id = -1 par exemple) * Producteur WCF: l'énumération des collection proxy n'est plus accessible par .Values. C'est comme pour le modèle. De ce fait, les collection proxy n'implémentent plus IDictionary<> 20071015: Bug fixes: * Producteur Model: on avait parfois un "nested persistence command not supported..." sur les méthodes de type "raw(...)" (pas "load(...) raw") * Producteur WCF: la désérialisation de certaines propriétés (en includeInSerialization=true) ne fonctionnait pas * Producteur WCF: ajout du SaveByRef (pour les identités) qui n'apparaissait pas dans le proxy (uniquement dans le service) * Producteur WCF: le Delete utilise maintenant le DeleteByKey des services sous jacent (plus efficace) * Producteur WCF: les entités dérivées perdaient leur TypeName (impossible d'appeler Save) 20071012: New features: * Producteur WCF: prise en charge des many to many * Importer SQL Server: ajout des relations retour. * Runtime ServiceHost: nouvel argument de ligne de commande: dependson. permet de spécifier une liste de dépendances. ex: ....Exe /dependson:wmi,MsSqlServer * Runtime WCF: Support du binding WPF automatique pour les blobs de type Image en mode WCF ou HTTP direct. Ex: <-- mode HTTP Direct, pour les classes dans la DLL proxy <-- mode WCF, pour les classes dans la DLL proxy <-- mode SQL, pour les classes dans la DLL CodeDom Bug fixes: * Runtime WCF: Correction de la gestion du cache des blobs dans le cas de binding WPF. * Runtime ServiceHost: Correction du code du server BITS 20071009: Known issues: * Producteur WCF: le proxy pour les entités dérivées ne fonctionne pas * Producteur WCF: (by design) le producteur WCF modifie les classes de CodeDom, en rajoutant IDictionary. Le résultat c'est que les classes CodeDom ne sont plus utilisables par les Web Services. Bug fixes: * Producteur WCF: une entité dérivée dont la base était dans un namespace différent ne compilait pas. * Producteur WCF: les enums ne passaient pas. New features: * Model: possibilité d'utiliser des functions statiques pour les paramètres implicites. Ex: 20071008: Breaking changes: * Model: les propriétés dérivées ne sont plus supportées (si on redéfinit la même propriété dans un entité et dans une entitée dérivée) Bug fixes: * Producteur Model: correction des producteur Profile & WebService 20071005: New features: * Runtime & Producteur WCF: le producteur WCF crée aussi un serveur BITS automatiquement. Il est facilement utilisabe. Ex: CodeFluent.Runtime.BinaryServices.BitsServerAttribute.StartServer(typeof(CustomerService)); Console.ReadLine(); ensuite, il est démarré par défaut sur http://localhost:1027//// ex: http://localhost:1027/SoftFluent.CarRental/SoftFluent.CarRental.Customer/Customer_Photo/a0cad2ae-9c06-4692-89a6-b4d8f3ea7fa6 on peut downloader avec un browser, avec BITS, et uploader avec BITS (en utilisant BITSADMIN ou SharpBITS http://sharpbits.xidar.net) * Producteur WCF: les webtypes MembershipProvider, RoleProvider, BasicAuth et ProfileProvider sont supportés. Il faut configurer le sous producteur WCF avec produceWebTypes=true: * Model: modification interne de la structure des events. possibilité de déclarer plusieurs events du même type. ex: private string CheckEveryWhere(System.Globalization.CultureInfo culture){return null;} Ceci permet aussi de déclarer des events spécifique au code du proxy (cf snippet CheckEveryWhere qui se retrouve aussi dans le proxy) * Meta Model Explorer: ajout de la fonction de production. File / Produce. Uniquement si View / Disable Producers n'est pas coché * Build: création d'une tâche MSBUILD pour la production. Elle est définie dans CodeFluent.Model.dll. Exemple: .BAT pour lancer (exemple): %windir%\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe /p:ModelPath=SoftFluent.CarRental.xml /target:Production Calypteo.msbuild ou (+ de détails) %windir%\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe /p:ModelPath=SoftFluent.CarRental.xml /v:diag /target:Production Calypteo.msbuild 20071002: Bug fixes: * Producteur Model: le onGetEvent ne fonctionnait pas sur des propriétés de type collection. New features: * Producteur Model: les enums supportent la définition d'attributs, comme entités et propriétés * Model: l'attribut formatBody à false empêche CF de remplacer les {0} par le namespace par défaut dans les code snippets. Breaking changes: * Producteur Model: LoadContent n'est plus appelé systématiquement dans les baseSave, mais la méthode reste générée