Entity Framework Core Cosmos DB提供程序的引导分区键

时间:2020-02-16 20:51:47

标签: entity-framework-core azure-cosmosdb ef-core-3.1

我正在尝试使用EF Core Cosmos DB提供程序,并且在我的实体类中,我使用Guid作为ID。同样,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,值转换器应该工作。 我想念什么?

谢谢!

0 个答案:

没有答案