Как автоматически увеличить идентификатор с помощью VARCHAR или NVARCHAR в Entity Framework Core? - PullRequest
1 голос
/ 15 апреля 2020

Раньше я делал это, используя составной столбец в моем коде SQL.

[ID] [int] IDENTITY(1,1) NOT NULL,
[PreFix] [varchar](50) NOT NULL,
[EmployeeNo]  AS ([PreFix]+ RIGHT('0000000' + CAST(Id AS VARCHAR(7)), 7)) PERSISTED,

Ответы [ 2 ]

2 голосов
/ 15 апреля 2020

Существуют в основном различные обходные пути, самым простым будет изменение метода OnModelCreating для использования одной из свободно используемых функций API HasComputedColumnSql в вычисляемом столбце.

Code First Approach

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Employee>()
    .Property(e => e.EmployeeNo)
    .HasComputedColumnSql("[PreFix]+ RIGHT('0000000' + CAST(Id AS VARCHAR(7)), 7)");
}

Первый подход к базе данных

При первом подходе к базе данных вы все равно можете определить логические вычисления c при создании таблицы и использовать следующую модификацию в сторона контекста ядра структуры сущности.

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Contact>()
            .Property(p => p.EmployeeNo)
            .ValueGeneratedOnAdd();
    }
0 голосов
/ 15 апреля 2020

Хорошо. Вы можете настроить генерацию в вашей базе данных для идентификатора. И тогда в вашей модели вы можете попробовать атрибут [DatabaseGenerated(DatabaseGeneratedOption.Identity)]:

public class Employee
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public string EmployeeNo { get; set; }
}

Проверить эту ссылку для получения дополнительной информации.

...