При создании таблиц и их столбцов в базе данных в Entity Framework по умолчанию действуют некоторые соглашения по именованию, которые указывают, какие имена должны быть у таблиц, столбцов, какие типы и т.д. Рассмотрим некоторые из этих соглашений.
Сопоставление типов
Типы SQL Serverа и C# сопоставляются следующим образом:
- int : int
- bit : bool
- char : string
- date : DateTime
- datetime : DateTime
- datetime2 : DateTime
- decimal : decimal
- float : double
- money : decimal
- nchar : string
- ntext : string
- numeric : decimal
- nvarchar : string
- real : float
- smallint : short
- text : string
- tinyint : byte
- varchar : string
NULL и NOT NULL
Все первичные ключи по умолчанию имеют определение NOT NULL.
Столбцы, сопоставляемые со свойствами ссылочных типов (string, array), в базе данных имеют определение NULL, а все значимые типы (DateTime, bool, char, decimal, int, double, float) – NOT NULL.
Если свойство имеет тип Nullable<T>
, то оно сопоставляется со столбцом с определением NULL.
Ключи
Entity Framework требует наличия первичного ключа, так как это позволяет ему отслеживать объекты. По умолчанию в качестве ключей EF рассматривает свойства с именем Id или [Название_типа]Id (например, PostId в классе Post).
Как правило, ключи имеют тип int
или GUID
, но также могут представлять и любой другой примитивный тип.
Названия таблиц и столбцов
С помощью специального класса PluralizationService Entity Framework проводит сопоставление между именами классов моделей и именами таблиц. При этом таблицы получают по умолчанию в качестве названия множественное число в соответствии с правилами английского языка, например, класс User – таблица Users, класс Person – таблица People (но не Persons!).
Названия столбцов получают названия свойств модели.
Если нас не устраивают названия таблиц и столбцов по умолчанию, то мы можем переопределить данный механизм с помощью Fluent API или аннотаций.