C# 必须在cosmosdb delete operaiton中为此操作提供PartitionKey值

C# 必须在cosmosdb delete operaiton中为此操作提供PartitionKey值,c#,asp.net,.net,azure,azure-cosmosdb,C#,Asp.net,.net,Azure,Azure Cosmosdb,我正在尝试从Cosmos DB中删除一个文档 我的代码如下: public async Task<IHttpActionResult> DeletePartner(string id) { var telemetry = new TelemetryClient(); try { if (!ModelState.IsValid) {

我正在尝试从Cosmos DB中删除一个文档

我的代码如下:

public async Task<IHttpActionResult> DeletePartner(string id)
        {
            var telemetry = new TelemetryClient();
            try
            {

                if (!ModelState.IsValid)
                {
                    return BadRequest(ModelState);
                }


                var customers = await CosmosStoreHolder.Instance.CosmosStoreCustomer.Query().Where(x=> x.PartnerId == id).ToListAsync();
                var userStore = CosmosStoreHolder.Instance.CosmosStoreUser;
                var users = await userStore.Query().Where(x => x.PartnerId == id).ToListAsync(); ;

                if (customers.Count> 0 || users.Count>0)
                {
                    return BadRequest("You cant delete partners with existing customers or users");
                }
                else
                {
                    var result = await CosmosStoreHolder.Instance.CosmosStorePartner.RemoveByIdAsync(id, "/CosmosEntityName");
                    return Ok(result);
                }
            }
            catch (Exception ex)
            {
                string guid = Guid.NewGuid().ToString();
                var dt = new Dictionary<string, string>
                {
                    { "Error Lulo: ", guid }
                };

                telemetry.TrackException(ex, dt);
                return BadRequest("Error Lulo: " + guid);
            }
        }
    }



[SharedCosmosCollection("shared")]
    public class Partner : ISharedCosmosEntity
    {
        /// <summary>
        /// Partner id
        /// </summary>
        [JsonProperty("Id")]
        public string Id { get; set; }

        /// <summary>
        /// Partner name
        /// </summary>
        public string PartnerName { get; set; }

        /// <summary>
        /// Partner contact name
        /// </summary>
        public string PartnerContact { get; set; }

        /// <summary>
        /// Partner contact phone
        /// </summary>
        public string PartnerPhone { get; set; }

        /// <summary>
        /// Partner contact Office 365 domain
        /// </summary>
        public string PartnerDomain { get; set; }

        /// <summary>
        /// Partner type, silver, gold or platinum
        /// </summary>
        [ValidEnumValue]
        public PartnerType PartnerType { get; set; }

        /// <summary>
        /// Partner start date
        /// </summary>
        public DateTime StartDate { get; set; }

        /// <summary>
        /// Partner end date
        /// </summary>
        public DateTime EndDate { get; set; }

        /// <summary>
        /// Parter enabled
        /// </summary>
        public bool  Enabled { get; set; }

        /// <summary>
        /// CosmosEntityname
        /// </summary>
        [CosmosPartitionKey]
        public string CosmosEntityName { get; set; }
    }

    /// <summary>
    /// Partner type Enum
    /// </summary>
    public enum PartnerType
    {
        ///Silver
        Silver,
        ///Gold
        Gold,
        ///Platinum
        Platinum
    }
公共异步任务DeletePartner(字符串id)
{
var telemetry=新遥测客户端();
尝试
{
如果(!ModelState.IsValid)
{
返回请求(ModelState);
}
var customers=wait CosmosStoreHolder.Instance.CosmosStoreCustomer.Query().Where(x=>x.PartnerId==id.toListSync();
var userStore=CosmosStoreHolder.Instance.CosmosStoreUser;
var users=await userStore.Query().Where(x=>x.PartnerId==id.toListSync();
if(customers.Count>0 | | users.Count>0)
{
return BadRequest(“您不能删除现有客户或用户的合作伙伴”);
}
其他的
{
var result=await CosmosStoreHolder.Instance.CosmosStorePartner.RemoveByIdAsync(id,“/cosmossentityname”);
返回Ok(结果);
}
}
捕获(例外情况除外)
{
字符串guid=guid.NewGuid().ToString();
var dt=新字典
{
{“错误Lulo:,guid}
};
遥测.跟踪异常(ex,dt);
返回BADDREQUEST(“错误Lulo:+guid”);
}
}
}
[SharedCommosCollection(“shared”)]
公共类合作伙伴:iSharedCommentity
{
/// 
///合作伙伴id
/// 
[JsonProperty(“Id”)]
公共字符串Id{get;set;}
/// 
///合作伙伴名称
/// 
公共字符串PartnerName{get;set;}
/// 
///合作伙伴联系人姓名
/// 
公共字符串PartnerContact{get;set;}
/// 
///合作伙伴联系电话
/// 
公共字符串PartnerPhone{get;set;}
/// 
///合作伙伴联系Office 365域
/// 
公共字符串PartnerDomain{get;set;}
/// 
///合作伙伴类型,银、金或白金
/// 
[有效值]
公共PartnerType PartnerType{get;set;}
/// 
///合作伙伴开始日期
/// 
公共日期时间起始日期{get;set;}
/// 
///合作伙伴结束日期
/// 
公共日期时间结束日期{get;set;}
/// 
///合作伙伴启用
/// 
已启用公共bool的{get;set;}
/// 
///宇宙感知名称
/// 
[CosmospationKey]
公共字符串CosmosEntityName{get;set;}
}
/// 
///伙伴类型枚举
/// 
公共枚举伙伴类型
{
///银币
银色,
///黄金
黄金,
///白金
铂金
}
但我有一个错误: 必须为此操作提供PartitionKey值

我试图将字符串“/cosmossentityname”作为第二个参数发送,但它不起作用


我正在使用宇航员

您需要使用请求选项。例如,如果您的集合是按CosmosEntityName分区的

await this.documentClient.DeleteDocumentAsync(productDocument._self, new RequestOptions { PartitionKey = new Microsoft.Azure.Documents.PartitionKey(productDocument.CosmosEntityName) });
编辑:

这是你需要的

您需要提供分区键值,而不是分区键 删除时定义。您的删除请求应该如下所示, 假设id是您的分区密钥


您需要将要删除的元素的分区键的值作为第二个参数传递,而不是路径和属性名

var result = await CosmosStoreHolder.Instance.CosmosStorePartner.RemoveByIdAsync(id, "<partition key value for that id>");
var result=wait-CosmosStoreHolder.Instance.CosmosStorePartner.RemoveByIdAsync(id,”);

由于您定义为PK的属性是
cosmonentityname
,因此您需要该文档的属性值。

我的实体中没有self。为什么是cosmoneut?您可以直接使用cosmosdb sdk。但是我更新了我的答案,因为我已经使用cosmonaut超过2年了,它比官方SDK更好,但是方法调用非常相似。
RemoveByIdAsync
不是Cosmos DB SDK的一部分,你能分享该方法的代码以及它如何调用Cosmos DB SDK吗?它是cosmonaut的一部分,哪一个是cosmosdb使用最广泛的第三方sdk
var result = await CosmosStoreHolder.Instance.CosmosStorePartner.RemoveByIdAsync(id, "<partition key value for that id>");