|This article is flagged as incomplete
You hear it a lot: Convention Over Configuration. This is the Ruby On Rails mantra and had a lot of merit. At its core it means that what you do (especially if you've done it a lot) should carry a lot more weight than having to configure (and reconfigure) things over and over.
- Column names should never contain reserved words (system, string, int, etc)
- Column names should not be the same as table names
If you want to use SubSonic to access your table, you need to have a Primary Key defined for your table. This is good practice in every case and we need it to do certain things with your table. If you don't have a Primary Key defined, your class won't be generated.
If you don't believe us, or if you think this is a silly convention - SubSonic isn't for you.
For lookup tables, the key should be the first column and the "Descriptor" (i.e. ProductName) the second column. Many of our lookup functions depend on this. Column names such as "ShortDescription" will have labels such as "Short Description" in scaffold.
ActiveRecord Specific Conventions
Every table can have some auditing ability built in, but this is not required. These fields are:
- CreatedOn (datetime)
- CreatedBy (nvarchar(50))
- ModifiedOn (datetime)
- ModifiedBy (nvarchar(50))
If you want to use logical deletes, you can by adding a field called "Deleted" or "IsDeleted"
SimpleRepository Specific Conventions
- Generated table names will be plural
If you call a column “ID” or “Key” or “[ClassName]ID” – no matter it’s type – that will be your Primary Key. If you have other things in mind you can use a primary key attribute [SubSonicPrimaryKey] contained in the SubSonic.SqlGeneration.Schema namespace and we’ll use that column.
There are two ways to tell SubSonic how to handle this – both using attributes. The first is [SubSonicStringLength(int length)] and the second is [SubSonicLongString] which sets to nvarchar(MAX) or LONGTEXT – depending on your provider.
The default is not null, but you can change this by making your propery a nullable type.
The default is a Precision of 10 and a scale of 2 but you can change that with the [SubSonicNumericPrecision(int precision, int scale)] attribute.
Ignoring a Property
You can ignore generation of a property by using [SubSonicIgnore] attribute.