Entity framework core EF Core Cosmos DB provider不提供';t将id填充为键和鉴别器的组合
我使用CosmosDB(sqlcore)+EFCore(3.1.10)+CosmosDB提供程序(3.1.10) 我的实体有财产Id(以资本Id开头),歧视未关闭 因此,根据和其他文章,我希望id将被填充为鉴别器和id的组合(“EntityType | IdValue”)。然而,在我的例子中,id只是用鉴别器值填充的 我的代码: 实体: DbContext:Entity framework core EF Core Cosmos DB provider不提供';t将id填充为键和鉴别器的组合,entity-framework-core,azure-cosmosdb-sqlapi,Entity Framework Core,Azure Cosmosdb Sqlapi,我使用CosmosDB(sqlcore)+EFCore(3.1.10)+CosmosDB提供程序(3.1.10) 我的实体有财产Id(以资本Id开头),歧视未关闭 因此,根据和其他文章,我希望id将被填充为鉴别器和id的组合(“EntityType | IdValue”)。然而,在我的例子中,id只是用鉴别器值填充的 我的代码: 实体: DbContext: class TestEntity3DbContext : DbContext { public DbSet<TestEnti
class TestEntity3DbContext : DbContext
{
public DbSet<TestEntity3> TestEntities3 { get; protected set; } = null!;
public TestEntity3DbContext(DbContextOptions<TestEntity3DbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
builder.HasDefaultContainer("UnifiedStorage");
builder.Entity<TestEntity3>(o =>
{
o.HasKey(o => o.Id);
o.HasPartitionKey(o => o.Id);
});
}
}
因此,我看到了此记录(删除了几个字段):
}
因此,这里有id=“TestEntity3”,但它应该是“TestEntity3 | fe2b7107-f9d0-4c7d-a594-F6BCAB36CD”
我错过什么了吗?有人知道怎么了吗
提前谢谢你。我也看到了这一点,相信这是故意的 当您对分区键和主键使用相同的属性时,就会发生这种情况。其思想是,
id
在每个分区中应该是唯一的。在这种情况下,您的意思是每个分区键都是唯一的(即每个分区中只有一个实体),因此除了跟踪鉴别器之外,没有理由使用id
class TestEntity3DbContext : DbContext
{
public DbSet<TestEntity3> TestEntities3 { get; protected set; } = null!;
public TestEntity3DbContext(DbContextOptions<TestEntity3DbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
builder.HasDefaultContainer("UnifiedStorage");
builder.Entity<TestEntity3>(o =>
{
o.HasKey(o => o.Id);
o.HasPartitionKey(o => o.Id);
});
}
}
_testEntityContext.TestEntities3.Add(new TestEntity3()
{
Id = Guid.NewGuid().ToString(),
Prop3 = "Hello"
});
await _testEntityContext.SaveChangesAsync();
{
"Id": "fe2b7107-f9d0-4c7d-a594-f6bccaab36cd",
"Discriminator": "TestEntity3",
"Prop3": "Hello",
"id": "TestEntity3",
"_ts": 1605731991