Azure 如何通过实体框架核心代码优先的方法从cosmosdb集合设置分区键?

Azure 如何通过实体框架核心代码优先的方法从cosmosdb集合设置分区键?,azure,asp.net-core,.net-core,entity-framework-core,azure-cosmosdb,Azure,Asp.net Core,.net Core,Entity Framework Core,Azure Cosmosdb,公共类taxanthandbcontext:DbContext { 公共TaxathandDbContext(DbContextOptions选项):基本(选项) { 数据库。请重新创建(); } protected TaxathandDbContext() { Database.EnsureCreated(); } public DbSet<Address> Address { get; set; } protected

公共类taxanthandbcontext:DbContext { 公共TaxathandDbContext(DbContextOptions选项):基本(选项) { 数据库。请重新创建(); }

    protected TaxathandDbContext()
    {
        Database.EnsureCreated();
    }

    public DbSet<Address> Address { get; set; }


    protected override void OnModelCreating(ModelBuilder modelBuilder)
            {                    
                OneCollectionPerDbSet(modelBuilder);
            }

    private void OneCollectionPerDbSet(ModelBuilder modelBuilder)
    {
        var dbSets = typeof(TaxathandDbContext).GetProperties(BindingFlags.Public | BindingFlags.Instance)
            .Where(p => p.PropertyType.IsGenericType && typeof(DbSet<>).IsAssignableFrom(p.PropertyType.GetGenericTypeDefinition()));
        foreach (var dbSet in dbSets)
        {`enter code here`
            var metadata = modelBuilder.Entity(dbSet.PropertyType.GetGenericArguments()[0]).Metadata;
            metadata.Cosmos().ContainerName = dbSet.Name;
        }
    }
}
受保护的TaxathandDbContext()
{
数据库。请重新创建();
}
公共数据库集地址{get;set;}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{                    
OneCollectionPerDbSet(模型生成器);
}
私有void OneCollectionPerDbSet(ModelBuilder ModelBuilder)
{
var dbSets=typeof(TaxathandDbContext).GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Where(p=>p.PropertyType.IsGenericType&&typeof(DbSet).IsAssignableFrom(p.PropertyType.GetGenericTypeDefinition());
foreach(dbSet中的var dbSet)
{`在这里输入代码`
var metadata=modelBuilder.Entity(dbSet.PropertyType.GetGenericArguments()[0])。元数据;
metadata.Cosmos().ContainerName=dbSet.Name;
}
}
}
根据微软的说法,这非常简单。需要注意的一点是:分区键必须是string或to string

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
        modelBuilder.Entity<TodoItem>()
            .HasPartitionKey(o => o.Id);
}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.HasPartitionKey(o=>o.Id);
}