Я пытаюсь использовать поставщика 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 должны работать преобразователи значений. Что мне не хватает?
Спасибо у!