Well, for the future, I would say:
1) The option to support LinQ is pretty high on the list....I am working on that myself. The ideal is that we should be able to work with the mapping meta data generated by SqlMetal or a GUI Designer, in the same way we do with meta data from the SqlSchemaProvider in Codesmith - basically have a LinqSchemaProvider that is as close as a drop in replacement to the Sql version as possible so the current templates do not require major reworking, and gradually add to / alter the templates to implement LinQ for Databases and LinQ for Entities within the framework.
For those who might be interested, while looking into this I came across an alternative AssemblySchemaExplorer written for Codesmith 2.6 that was an attempt to use Classes identified by reflection as the starting point for Code Generation rather than the SqlSchemaProvider. http://www.ridgway.co.za/eden/PermaLink,guid,2ff12f1d-1b8b-4807-b6f2-dcfd9e56b1bc.aspx. I'll post later in more detail as to how this might be useful, but heres a hint...
If you use the LinqDesigner in the May CTP, it generates a Class that contains attributes such as:
[System.Data.DLinq.
Column(Name="CompanyName", Storage="_CompanyName", DBType="nvarchar NOT NULL")]
[System.Data.DLinq.
Association(Name="FK_Orders_Customers", Storage="_Customer", ThisKey="CustomerID", IsParent=true)]
Some time earlier this year I wrote a demo that used reflection to look at Attributes that had been attached to Properties of a class, that was then output to an XML file, that described column types, names etc, and any relationships between them. http://community.codesmithtools.com/forums/permalink/16042/16042/ShowThread.aspx#16042
The syntax for these Attributes was:
[
PropertyMetaData(false, "", 0, 0, 0, false)]
[RelationshipMetaData("FK_OrdersToCustomers", "", "Customers", "CustomerID")]
public int CustomerID
{
get { return _customerID; }
set { _customerID = value; }
}
The Xml file was used to create a Database using a basic Codesmith Template, then .NetTiers was used to generate on that database to add the 'plumbing' to the concrete classes that had already been created with the Custom Attributes.
Potentially, using a Reflection based SchemaProvider would bypass all this: Design your classes in the LinQ Designer (perhaps based on an existing Database, perhaps constructed 'Ghost Tables'), add Relationships, and build the project. Open Codesmith, select the .NetTiers template and specify the SchemaProvider as LinQReflectionSchemaProvider. Open the dll created by the LinQ project, and the LinQReflectionSchemaProvider allows you to select Linq Entities (C.F Tables) to generate against, including relationship MetaData etc - but this does not currently include Index meta data..... it might be possible to extract this by using Linq itself within the SchemaProvider, but SQLMetal does include Index data - apparently the two approaches are merging to support a standard Schema definition.
However, it does allow for Inheritence modelling in meta data terms (a possible enhancement to .NetTiers..?), the creation of what I referred to earlier as 'Ghost Tables', and does support Views.
Used in conjunction with an XML file generated by SQLMetal, which would allow overrides (e.g. more complex persistance of an object to multiple tables, and you have a pretty flexible, and largely Graphical, way to design and build a Data Domain that is then used to create the .NetTiers architecture...
In would seem, if MS delivers with LinQ, we can:
- Take an existing Database, graphically design the Domain we wish to achieve, add 'ghost tables' to represent Entities, declare relationships - as if we were designing a Class Hierarchy.
- Without a Database, graphically design the Domain we wish to achieve, add 'ghost tables' to represent Entities, declare relationships - as if we were designing a Class Hierarchy.
- Generate a .NetTiers architecture whichever approach is taken.
The more flexible Codesmith is in giving us multiple approaches to obtaining metadata the better.
Another project that is of interest is BLinq : http://www.asp.net/sandbox/app_blinq.aspx?tabid=62
2) Lightweight Entities that are effectively created from the output of Custom Stored Procedures, as per the 'Ghost Tables' concept mentioned earlier. I dont really want to have unneccessary Views added to the Database just to create an Entity that does not have a direct one-to-one table mapping. There should be sufficient meta data there from stored procedures to generate the basic Properties and some Validation Rules, without looking for Indexes, Relationships etc. CSP's would retrieve data from multiple tables and handle any updates.
3) For Web - only projects, make generation of the events and Interface implementations that are really only of interest to WinForms apps an option. This would reduce the amount of code quite substantially, I think...
4) Examples of using different physical architectures... out of the box, the code generated is suitable for installing on a single web server or multiple servers (i.e. Web Farm), but not the common web server > application server > database server (at least for the Domain model). Id love to see example applications that include Remoting, Message Queuing, WCF used as inter-tier transports....
5) Keep on the good work with the Strongly Typed UI controls - the DataSources and Repeater, for example. I demoed how to generate against an exisiting db to a colleague, and by the time I showed him the Admin screens, and how simple it was to include a Datasource with syntax completion for Paramaters, Deep Load Types etc, he asked me stop, as he was blown away with how much time it would have saved him compared to having written the application from scratch, as he used to do. 
6) PLEASE, add a 'Refresh Schema' button to the CodeSmith interface - just a small point but its annoying to have to manually refresh the Schema by desecting / reselecting tables etc when debugging generated code / altering the Database during development....
Oh, and can we have the number of 'Views' each topic has had back please? It would be nice to know if anyone is reading this 