我正在尝试使用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,值转换器应该工作。 我想念什么?
谢谢!