使用 Servicestack ORMLite 加载所有分层引用

sco*_*oob 3 ormlite-servicestack

有没有办法使用 servicestack / ormlite 预加载所有嵌套和子嵌套引用?

 public class Person

{

    public int Id { get; set; }

    [References(typeof(Pants))]
    public int PantsId { get; set; }

    [Reference]
    public Pants Pants { get; set; }

}

public class Pants
{

    public int Id { get; set; }

    [References(typeof(Pocket))]
    public int PocketId { get; set; }

    [Reference]
    public Pocket Pocket { get; set; }

}

public class Pocket
{

    public int Id { get; set; }

    public int Depth { get; set; }

}

Db.LoadSelect<Person>()  
Run Code Online (Sandbox Code Playgroud)

当我使用 Db.LoadSelect() 加载人员时,它仅获取对 person.Pants 的引用... person.Pants.Pocket 为 null。我必须执行 Db.LoadReferences(person.Pants) 才能加载口袋引用。

有什么方法可以自动加载所有嵌套引用,或者仅限于一层?

谢谢。

myt*_*thz 5

OrmLite 的db.Load*API 仅限于加载 1 级深度的引用。可Db.LoadReferences(instance)用于进一步获取断开连接的 POCO 的引用。

如果单独加载引用,您还应该注意,以避免通过在循环中加载它们来避免N+1查询,即,如果可能,最好使用单个查询来获取相关记录,以避免多次数据库命中。