asp.net - 如何在 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;
}
}
}
最好的方法是什么?
解决方案
推荐阅读
- swift - 要设置的字典
- windows - io.Copy 比调用 mv 命令慢很多
- ios - iOS 11 应用提交:“符号文件过多”
- css - 垂直调整窗口大小时,Div 容器消失
- python - 如何替换以 . (时期)?
- python - 从 Pycharm 解析 HDFS 文件
- python - ImportError:无法导入名称 MapTile
- flutter - Flutter 目录不是 GitHub 项目的克隆
- sql-server - TSQL 2012 服务器数据类型错误消息 varchar 转换浮点数(仅 SUM 值)
- mysql - Nginx Puma 和 Rails 5 负载测试失败