Как настроить модель как первичный автоинкрементный ключ в EF Core с помощью Fluent API?
В проекте с ef core в модели использую в качестве первичного ключа объект, в котором содержится сам Id.
Пример модели:
public class Catalog
{
public Catalog()
{
}
public CatalogId Id { get; set; }
public string FullName { get; set; }
}
Пример класса первичного ключа:
public class CatalogId
{
public int Id { get; }
public CatalogId(int id)
{
Id = id;
}
}
Настроил ef core так что он понимает как мапить объект:
builder.Property(c => c.Id)
.HasConversion(
v => v.Id,
v => new CatalogId(v))
.IsRequired();
builder.HasKey(c => c.Id);
Но при этом не получается записать данные в базу. Ругается что первичный ключ нулевой. Заглянул в базу, в таблице объект не создался как автоинкрементный, столбец создался как обычный первичный ключ.
Проверил миграции, для обычных моделей Id генерируется следующим образом:
Id = table.Column<int>(nullable: false)
.Annotation("SqlServer:Identity", "1, 1")
В моем случае с классом Catalogs, отсутствует Annotation("SqlServer:Identity", "1, 1"), добавление аннотации в миграцию вручную не помогло, т.к. в таком случае при вставке данных модели с Id = 0 Ef Core воспринимает как попытку вставить Id в автоинкрементное поле.
Как через Fluent Api настроить Ef Core так, чтобы поле было автоинкрементным первичным ключом?
P.S: Ef core версии 3.1.6
P.S.S.: Использовать аннотации по типу [DatabaseGenerated(DatabaseGeneratedOption.Identity)] не могу, класс в домене. Создать DTO и мапить доменную сущность в обычную, очень усложняет реализацию.