在为 LINQ cosmos 数据库建模时,我应该创建 "Id" 属性 吗?
Should I create the "Id" property when modeling a LINQ cosmos db?
假设我要创建以下文档
{
"Id": "6a23a5f3-0f77-40a9-b9f9-26e88537a962",
"CarHistory": [
{ "model":"ford", "price": 100, "kilometers": 100 "current": true },
{ "model":"ford", "price": 200, "kilometers": 200, "current": false },
]
}
在 Poco 中,我猜该模型可能看起来像以下几行:
public class Document
{
public Guid Id { get; set; }
}
public class Car : Document
{
public string Model {get; set;}
public decimal Price {get; set;}
public int Kilometers {get; set;}
public bool Current {get; set;}
}
所以后来我创建..
public class MasterCar : Document
{
public ICollection<Car> CarHistory { get; set; } = new List<Car>();
}
调试时似乎一切正常:
我在服务中的某处以编程方式创建 Guid,例如:
var masterCar = new MasterCar(){ Id = Guid.NewGuid() }
但是当我进入 cosmos db 模拟器和一个 SELECT * FROM
时,我检查了 Id 属性 它的值是:
"id": "00000000-0000-0000-0000-000000000000",
谁能指出我做错了什么?或者这应该如何完成,我读到
您不应该自己提供 Id,但是我怎样才能以编程方式访问 Id 属性 呢?
例如:
CarService.GetById(Car.Id); //Id property doesnt exist if there is no property in poco
下面是我的测试代码,你可以试试:
Document.cs
public class Document
{
[JsonProperty("id")]
public Guid Id { get; set; }
}
Car.cs
public class Car
{
[JsonProperty("model")]
public string Model { get; set; }
[JsonProperty("price")]
public decimal Price { get; set; }
[JsonProperty("kilometers")]
public int Kilometers { get; set; }
[JsonProperty("current")]
public bool Current { get; set; }
public override string ToString()
{
return JsonConvert.SerializeObject(this);
}
}
硕士Car.cs
public class MasterCar : Document
{
public ICollection<Car> CarHistory { get; set; } = new List<Car>();
public override string ToString()
{
return JsonConvert.SerializeObject(this);
}
}
创建和搜索:
var guid = Guid.NewGuid();
var masterCar = new MasterCar() { Id = guid };
var car = new Car() { Model = "ford", Price = 100, Kilometers = 100, Current = true };
var car2 = new Car() { Model = "ford", Price = 200, Kilometers = 200, Current = false };
var carHistory = masterCar.CarHistory;
carHistory.Add(car);
carHistory.Add(car2);
CosmosClient client = new CosmosClient(connection_string);
Container container = client.GetContainer(databaseId, containerName);
await container.CreateItemAsync<MasterCar>(masterCar);
ItemResponse<MasterCar> itemResponse = await container.ReadItemAsync<MasterCar>(guid.ToString("D"), new PartitionKey(guid.ToString("D")));
Console.WriteLine(itemResponse.Resource.ToString());
结果:
假设我要创建以下文档
{
"Id": "6a23a5f3-0f77-40a9-b9f9-26e88537a962",
"CarHistory": [
{ "model":"ford", "price": 100, "kilometers": 100 "current": true },
{ "model":"ford", "price": 200, "kilometers": 200, "current": false },
]
}
在 Poco 中,我猜该模型可能看起来像以下几行:
public class Document
{
public Guid Id { get; set; }
}
public class Car : Document
{
public string Model {get; set;}
public decimal Price {get; set;}
public int Kilometers {get; set;}
public bool Current {get; set;}
}
所以后来我创建..
public class MasterCar : Document
{
public ICollection<Car> CarHistory { get; set; } = new List<Car>();
}
调试时似乎一切正常: 我在服务中的某处以编程方式创建 Guid,例如:
var masterCar = new MasterCar(){ Id = Guid.NewGuid() }
但是当我进入 cosmos db 模拟器和一个 SELECT * FROM
时,我检查了 Id 属性 它的值是:
"id": "00000000-0000-0000-0000-000000000000",
谁能指出我做错了什么?或者这应该如何完成,我读到 您不应该自己提供 Id,但是我怎样才能以编程方式访问 Id 属性 呢? 例如:
CarService.GetById(Car.Id); //Id property doesnt exist if there is no property in poco
下面是我的测试代码,你可以试试:
Document.cs
public class Document
{
[JsonProperty("id")]
public Guid Id { get; set; }
}
Car.cs
public class Car
{
[JsonProperty("model")]
public string Model { get; set; }
[JsonProperty("price")]
public decimal Price { get; set; }
[JsonProperty("kilometers")]
public int Kilometers { get; set; }
[JsonProperty("current")]
public bool Current { get; set; }
public override string ToString()
{
return JsonConvert.SerializeObject(this);
}
}
硕士Car.cs
public class MasterCar : Document
{
public ICollection<Car> CarHistory { get; set; } = new List<Car>();
public override string ToString()
{
return JsonConvert.SerializeObject(this);
}
}
创建和搜索:
var guid = Guid.NewGuid();
var masterCar = new MasterCar() { Id = guid };
var car = new Car() { Model = "ford", Price = 100, Kilometers = 100, Current = true };
var car2 = new Car() { Model = "ford", Price = 200, Kilometers = 200, Current = false };
var carHistory = masterCar.CarHistory;
carHistory.Add(car);
carHistory.Add(car2);
CosmosClient client = new CosmosClient(connection_string);
Container container = client.GetContainer(databaseId, containerName);
await container.CreateItemAsync<MasterCar>(masterCar);
ItemResponse<MasterCar> itemResponse = await container.ReadItemAsync<MasterCar>(guid.ToString("D"), new PartitionKey(guid.ToString("D")));
Console.WriteLine(itemResponse.Resource.ToString());
结果: