Azure Cosmos DB(EF / Core)-骆驼案例属性名称

时间:2020-06-22 10:42:22

标签: c# json entity-framework azure-cosmosdb

我有一个.NET Core 3.1 API项目,该项目具有通过实体框架(Microsoft.EntityFrameworkCore.Cosmos-v3.1.5)处理的Cosmos DB存储。

我有一个数据库模型:

[JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]
public class BikeRental
{
    [JsonProperty(PropertyName = "id")]
    [Key]
    public Guid Id { get; set; }

    [JsonProperty(PropertyName = "bikeId")]
    public string BikeId { get; set; }

    [JsonProperty(PropertyName = "shopId")]
    public string ShopId { get; set; }
}

保存到CosmosDB数据库后,将使用类属性名称对列进行序列化,而忽略“ PropertyName”属性。例如,如果将'bikeId'更改为'testBikeId',则其仍写为'BikeId'。

{
    "Id": "192dfdf4-54cb-4290-a478-7035518983ca",
    "BikeId": "eb65b93b-17d3-4829-9729-d48c029211fe2",
    "ShopId": "636c08c4-600d-458a-98b7-8d312b8c18d2",

    "_rid": "2QZIAMVYbVQBAAAAAAAAAA==",
    "_self": "dbs/2QZIAA==/colls/2QZIAMVYbVQ=/docs/2QZIAMVYbVQBAAAAAAAAAA==/",
    "_etag": "\"00000000-0000-0000-4627-f721b0e701d6\"",
    "_attachments": "attachments/",
    "_ts": 1592564051
}

对于解决此问题的任何帮助或建议,将不胜感激!

编辑: 通过以下方式将对象保存到Cosmos:

var response = _context.BikeRentals.Add(obj)
_context.SaveChanges();

1 个答案:

答案 0 :(得分:0)

对于EF映射,请使用ColumnAttribute或OnModelCreating中的流畅配置。

对于Cosmos,您可能希望数据库中的名称与序列化以发送给客户端时的名称相同,但是在一般情况下,您的实体映射到数据库的方式可能与JSON序列化的方式不同。

您应该使用Fluent API并迭代所有实体类型和属性,并应用Pascal-to-Camel-Case转换。