Ключ раздела Guid для провайдера Entity Framework Core Cosmos DB - PullRequest
0 голосов
/ 16 февраля 2020

Я пытаюсь использовать поставщика EF Core Cosmos DB, а в своем классе сущности я использую Guid в качестве идентификатора. Также значение Guid будет ключом раздела в коллекции Cosmos DB. В документации поставщика EF Core Cosmos DB (https://docs.microsoft.com/en-us/ef/core/providers/cosmos/?tabs=dotnet-core-cli) говорится, что: " Свойство ключа раздела может быть любого типа, если оно преобразовано в строку. " Моя сущность класс выглядит примерно так:

public class UserDto
{
    [JsonProperty(PropertyName ="id")]                
    public Guid Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
    public CountryDto Country { get; set; }

    public override string ToString()
    {
        return JsonConvert.SerializeObject(this);
    }
}

В контексте класса БД у меня есть что-то вроде:

public class CosmosDbContext : DbContext
{
    public CosmosDbContext(DbContextOptions<CosmosDbContext> options)  : base(options)
    {

    }

    public DbSet<UserDto> Users { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<UserDto>()
            .ToContainer("Users");

        var converter = new GuidToStringConverter();
        modelBuilder.Entity<UserDto>()
            .Property("Id")
            .HasConversion(converter);

        modelBuilder.Entity<UserDto>()                
            .HasPartitionKey(x => x.Id);


        modelBuilder.Entity<UserDto>()
            .OwnsOne(u => u.Country);            
    }
}

Всякий раз, когда я пытаюсь добавить нового пользователя в коллекцию, я получаю следующее ошибка: Microsoft. Azure .Cosmos.CosmosException: Код состояния ответа не указывает на успех: 400 Подстатус: 1001 Причина: (Microsoft. Azure .Documents.DocumentClientException: Сообщение: {"Ошибки": ["PartitionKey извлеченный из документа не совпадает с указанным в заголовке "]}

Если в моей коллекции нет ключа разделения, и я удаляю код, который устанавливает ключ разделения и преобразователь значений в методе OnModelCreating код будет работать нормально.

По этой ссылке: https://github.com/dotnet/efcore/issues/12086 должны работать преобразователи значений. Что мне не хватает?

Спасибо у!

...