Как настроить формат идентификатора для модели в ASP .NET Core Web API? - PullRequest
0 голосов
/ 26 августа 2018

Во время метода post для веб-API генерируется новый идентификатор. У меня вопрос, есть ли способ / вариант, чтобы указать формат этого идентификатора? Например, я хотел бы настроить идентификатор так, чтобы он стал строкой типа «A001» или «A002» вместо 0,1,2,3 и т. Д. Я посмотрел учебник @ здесь .

Пример кода модели:

namespace TodoApi.Models
{
    public class TodoItem
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public bool IsComplete { get; set; }
    }
}

Метод публикации через веб-API:

[HttpPost]
public IActionResult Create(TodoItem item)
{
    _context.TodoItems.Add(item);
    _context.SaveChanges();

    return CreatedAtRoute("GetTodo", new { id = item.Id }, item);
}

1 Ответ

0 голосов
/ 27 августа 2018

Чтобы настроить формат Id, вы можете попробовать код, как показано ниже

Добавить генератор значений

 public class IdValueGenerator:ValueGenerator<string>
{
    public override bool GeneratesTemporaryValues => false;

    public override string Next(EntityEntry entry)
    {
        if (entry == null)
        {
            throw new ArgumentNullException(nameof(entry));
        }
        var context = (TodoDbContext)entry.Context;
        var id = context.TodoItem.LastOrDefault()?.Id == null ?
                "A001"
                : Regex.Replace(context.TodoItem.LastOrDefault()?.Id, "\\d+", m => (int.Parse(m.Value) + 1).ToString(new string('0', m.Value.Length)));

        return id;
    }
}

В модели создания

  protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.Entity<TodoItem>()
               .Property(t => t.Id)
               .HasValueGenerator<IdValueGenerator>();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...