C# Azure Cosmos DB(EF/Core)-ID列包含类名
我有一个C# Azure Cosmos DB(EF/Core)-ID列包含类名,c#,json,entity-framework,azure-cosmosdb,C#,Json,Entity Framework,Azure Cosmosdb,我有一个.NET Core 3.1API项目,该项目有一个Cosmos DB存储,通过实体框架处理(Microsoft.EntityFrameworkCore.Cosmos-v3.1.5) 我有一个数据库模型: public class BikeRental { [Key] public Guid Id { get; set; } public string BikeId { get; set; } public string ShopId { get; set; } }
.NET Core 3.1
API项目,该项目有一个Cosmos DB存储,通过实体框架处理(Microsoft.EntityFrameworkCore.Cosmos-v3.1.5)
我有一个数据库模型:
public class BikeRental
{
[Key] public Guid Id { get; set; }
public string BikeId { get; set; }
public string ShopId { get; set; }
}
然后,我有一个流畅的配置,将实体名称映射到camel case:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
foreach (var entity in modelBuilder.Model.GetEntityTypes())
{
foreach (var property in entity.GetProperties())
{
var camel = Char.ToLowerInvariant(property.Name[0]) + property.Name.Substring(1);
property.SetPropertyName(camel);
property.SetColumnName(camel);
}
}
}
保存到Cosmos后,“id”现在包含BikeRental的类名:
{
"id": "BikeRental|0042a855-0473-41d3-a344-49af808a0ffd",
"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
}
如果我将模型更改为具有小写id,而不是我预期的记录写入Cosmos的id:
{
"id": "ec86b971-b305-4055-b29f-8a4a7c5bf125",
"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将许多不同的类型放在同一个容器中,因此它们应该具有鉴别器属性。谢谢David。HasNoDiscriminator();'已经完成了这个技巧,因为这将是存储在这个容器中的唯一实体。我猜它正在尝试添加某种自动鉴别器。尝试添加并显式配置鉴别器。默认情况下,Cosmos将许多不同的类型放在同一个容器中,因此它们应该具有鉴别器属性。谢谢David。HasNoDiscriminator();'已完成此操作,因为这将是存储在此容器中的唯一实体。