Constraints
Nullability
Column definitions can be extended with nullability constraints, using Null()
and NotNull()
.
var customer = Table.Create("Customer",
"ID".Int().NotNull(),
"Name".NVarChar(100).NotNull(),
"Description".NVarCharMax().Null());
CREATE TABLE [Customer] (
[ID] INT NOT NULL,
[Name] NVARCHAR(100) NOT NULL,
[Description] NVARCHAR(MAX) NULL
);
Duplicate nullability constraints, like "Status".Int().Null().Null()
, are harmless and are normalised down to one during SQL generation. Contradictory nullability constraints, like "Status".Int().Null().NotNull()
, will cause an error during SQL generation.
Primary Keys
A column can be defined as a primary key with the PrimaryKey()
extension method.
var customer = Table.Create("Customer",
"ID".Int().PrimaryKey(),
"Name".NVarChar(100).NotNull());
CREATE TABLE [Customer] (
[ID] INT NOT NULL PRIMARY KEY,
[Name] NVARCHAR(100) NOT NULL
);
Note that a primary key column is automatically made non-nullable, so this doesn’t need to be specified. Trying to make a primary key field nullable will cause an error during SQL generation.
Composite (multi-column) primary keys defined on a table are not yet supported by Fluent SQL.
Defaults
Column default constraints can be set using the Default()
extension method.
var customer = Table.Create("Customer",
"ID".Int().PrimaryKey(),
"Status".Int().NotNull().Default(0));
CREATE TABLE [Customer] (
[ID] INT NOT NULL PRIMARY KEY,
[Status] INT NOT NULL DEFAULT (0)
);
The Default()
method takes a SQLExpression
as an argument, but this must be a constant expression and cannot refer to other columns. Fluent SQL doesn’t enforce these rules, so be aware that complex expressions can fail at run-time. Use constant values, NULL
, or scalar functions.