在 RavenDb 中建立一对多模型以获得更好的性能

Ric*_*ani 1 c# relationship document-database ravendb

我正在接近文档数据库,但在以下情况下,我对如何映射文档关系有点困惑

public class Person
{
    public Person()
    {
    }
    public int Id { get; set; }
    public string Name { get;set;}
    public string Surname { get; set; }
    public DateTime? BirthDate { get; set; }
}


public class Car
{
    public Car() { }
    public int Id { get; set; }
    public string Name { get; set; }
    public int PersonId { get; set;}
}
Run Code Online (Sandbox Code Playgroud)

例如,一个人拥有一辆或多辆汽车,我可以按如下方式查询数据库

public Car Get(int id)
    {
        Car car = null;
        using (IDocumentSession session = store.OpenSession())
        {
            car = session.Include<Car, Person>(x => x.PersonId).Load<Car>(id);
            bool isLoaded = session.Advanced.IsLoaded("people/" + car.PersonId); // true!
        }
        return car;
    }
Run Code Online (Sandbox Code Playgroud)

一切都很好,客户只发出一个请求,但是如果我有一个人并且我想显示他所有的汽车,我如何查询数据库来只执行一个请求?我想我必须修改模型List<int> CarsPerson供参考他的汽车。请注意,我不想嵌入Cars文档Person,因为Cars可以从其他文档中引用。

谢谢。

Aye*_*ien 5

你可以这样做:

using (IDocumentSession session = store.OpenSession())
{
    var carsForOne = session.Query<Car>()
             .Include(x=>x.PersonId)
             .Where(x=>x.PersonId == "people/1")
             .ToList();

    var person = session.Load<Person>("people/1");
}
Run Code Online (Sandbox Code Playgroud)

这仅发出一个数据库请求。