首页 > 解决方案 > 如何在 CosmosDB 中返回实体列表以及关系文档

问题描述

我不知道如何正确地给它一个标题,所以我会在这里尝试解释

在 ComosDB 中,我收集了一些包含某些字段的合作伙伴。

[SharedCosmosCollection("shared")]
    public class Partner : ISharedCosmosEntity
    {
        [JsonProperty("id")]

        public string Id { get; set; }
        public string PartnerName { get; set; }
        public string PartnerContact { get; set; }
        public string PartnerPhone { get; set; }
        public string PartnerDomain { get; set; }
        [ValidEnumValue]
        public PartnerType PartnerType { get; set; }
        public DateTime StartDate { get; set; }    
        public DateTime EndDate { get; set; }
        public bool  Enabled { get; set; }
        [CosmosPartitionKey]
        public string CosmosEntityName { get; set; }
    }


    public enum PartnerType
    {
        ///Silver
        Silver,
        ///Gold
        Gold,
        ///Platinum
        Platinum
    }

然后我有一个客户列表,每个客户都属于一个合作伙伴

 [SharedCosmosCollection("shared")]
    public class Customer : ISharedCosmosEntity
    {

        [JsonProperty("Id")]
        public string Id { get; set; }
        public string CustomerName { get; set; }
        public string CustomerContact { get; set; }
        public string CustomerPhone { get; set; }
        public string Domain { get; set; }    
        public DateTime StartDate { get; set; }   
        public DateTime EndDate { get; set; }
        public bool  Enabled { get; set; }
        public string PartnerId { get; set; }

        [CosmosPartitionKey]
        public string CosmosEntityName { get; set; }
    }

然后在获取客户的 API 中,我需要显示合作伙伴名称。

        [HttpGet]
        public async Task<IHttpActionResult> GetCustomers()
        {
            var telemetry = new TelemetryClient();
            try
            {
                var customers = await CosmosStoreHolder.Instance.CosmosStoreCustomer.Query().ToListAsync();
                return Ok(customers);
            }
            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);
            }
        }

        [HttpGet]
        public async Task<IHttpActionResult> GetCustomersByPartner(string partnerId)
        {
            var telemetry = new TelemetryClient();
            try
            {
                var customers = await CosmosStoreHolder.Instance.CosmosStoreCustomer.Query().Where(x=> x.PartnerId == partnerId).ToListAsync();
                return Ok(customers);
            }
            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);
            }
        }

如何连接到 CosmosDB 我使用 Cosmonaut SDK,为此我有一个助手:

public sealed class CosmosStoreHolder
    {

        public Cosmonaut.ICosmosStore<Customer> CosmosStoreCustomer { get; }
        public Cosmonaut.ICosmosStore<Partner> CosmosStorePartner { get; }



        CosmosStoreHolder()
        {

            CosmosStoreSettings settings = new Cosmonaut.CosmosStoreSettings(ConfigurationManager.AppSettings["database"].ToString(),
                 ConfigurationManager.AppSettings["endpoint"].ToString(),
                 ConfigurationManager.AppSettings["authKey"].ToString());

            settings.ConnectionPolicy = new ConnectionPolicy
            {
                ConnectionMode = ConnectionMode.Direct,
                ConnectionProtocol = Protocol.Tcp
            };



            CosmosStoreCustomer = new CosmosStore<Customer>(settings);

            CosmosStorePartner = new CosmosStore<Partner>(settings);


        }

        public static CosmosStoreHolder Instance
        {
            get
            {
                lock (padlock)
                {
                    if (instance == null)
                    {
                        instance = new CosmosStoreHolder();
                    }
                    return instance;
                }
            }
        }

最好的方法是什么?

标签: asp.net.netasp.net-coreazure-cosmosdb

解决方案


推荐阅读