Classes generated by SQL Metal have attributes placed on them that define their mapping to the underlying database.
Every time a changes occur in the mapping (e.g. A column name or size changes), the attributes on the class must be updated and thus must be recompiled.
This prevents using those classes as DTO (Data Transfer Object) in an nTier app ;where the assembly containing those classes would be shared between the client and the server; as it would require the client to be updated every time a column name changes on the server side.
Attribute-based mapping could easily be defined in a config file, adding tons of value to this project and separating matters in a more convenient way.

Allow OR Mapping to be defined in a config file instead of attributes
LYx
public class TestAttribute : ColumnAttribute
{
public TestAttribute(string propertyName)
{
Name = GetNameFromConfigFile(propertyName)
}
}
My testing so far shows DataContext picks up the TestAttribute attribute and uses the custom logic to get the column name. No doubt there will be some limitations, but this may satisfy some of your needs.
Alfo
Francois,
Thanks for the feedback about mapping file. We have received feedback from both those who prefer attributes and those who would like to see a mapping file. S we are reevaluating the tradeoffs. I have discussed both sides of the coin on my recent blog post as well.
Thanks.
Dinesh Kulkarni
Program Manager - The LINQ Project
http://blogs.msdn.com/Dinesh.Kulkarni/
I. Silvestri
But if you're not to provide both implementations, it would be at least a gread idea to define a structure for this mapping and allow a provider pattern that can be overriden by any other mapping source.
interface IMappingSource
{
DatabaseMapping GetMapping();
}
class DatabaseMapping
{
public TableMapping[] Tables
}
class TableMapping
{
public Type Type;
public string TableName;
...
public ColumnMapping[] Columns;
}
class ColumnMapping
{
Key = ...
...
}
By default you could provide the Attribute-based implementation while allowing it to be overriden by a config one.
DIW