Генератор пользовательских порядковых номеров в EF Core с использованием провайдера Cosmos DB - PullRequest
0 голосов
/ 18 января 2019

У меня есть требование генерировать уникальный идентификатор для каждой записи данного объекта. Я использую Cosmos DB, где одна коллекция может содержать несколько типов документов (сущностей). Используя EF Core, поставщика Cosmos DB, я обновляю эти коллекции новыми / обновленными данными, все работает гладко, когда EF Core генерирует хорошие GUID для полей идентификаторов моих сущностей.

Теперь, поскольку некоторые сущности участвуют в общении с клиентом, мне нужен способ генерировать «дружественные» уникальные номера для каждой сущности. Примером является номер счета, который следует определенному формату, например ГГГГ - ###### (например, 2019-000001).

Этот формат определен для типа объекта, и уникальность: - для типа объекта (который является полем в документе) - за коллекцию

Как настроить EF Core на использование генератора пользовательских числовых форматов при сохранении объекта? Одним из подходов, о котором я думал, было создание UDF в Cosmos, который генерирует число на основе формата, но я боюсь, что мне потребуется запросить документ после сохранения, так как EF Core не будет иметь никакого представления о значении это поле.

1 Ответ

0 голосов
/ 18 января 2019

Может быть, вместо этого вы можете добавить поле со своим сгенерированным идентификатором, добавить индекс в CosmosDB и использовать его вместо этого. Такое решение будет таким же быстрым, и у вас не будет проблем с EF Core.

Второй вариант - использовать строку вместо Guid и вручную создать идентификатор. Но я не уверен, что EF Core уже поддерживает такое отображение. Вы можете попробовать сделать это в protected override void OnModelCreating(ModelBuilder modelBuilder)

Последний вариант, который мне приходит в голову, - это создать Guid, который будет отвечать вашим требованиям и начинать (или содержать) необходимое число. Нравится: 20190000-2629-478a-be9e-bc596f2e85c2. Но я не уверен, что это хорошая идея

...