使用 Servicestack ORMLite 加载所有分层引用
Load all hierarchical references with Servicestack ORMLite
有没有办法用 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>()
当我使用 Db.LoadSelect() 加载一个人时,它只获取最多 person.Pants 的引用... person.Pants。Pocket 为空。我必须做一个 Db.LoadReferences(person.Pants) 来加载口袋参考。
有什么方法可以自动加载所有嵌套引用,还是仅限于一层?
谢谢。
OrmLite 的 db.Load*
API 仅限于加载 1 级深度的引用。 Db.LoadReferences(instance)
可用于进一步获取断开连接的 POCO 的引用。
您还应该注意单独加载引用以避免通过在循环中加载它们来避免 N+1 查询,即在可能的情况下最好使用单个查询来获取相关的记录以避免多次数据库命中。
有没有办法用 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>()
当我使用 Db.LoadSelect() 加载一个人时,它只获取最多 person.Pants 的引用... person.Pants。Pocket 为空。我必须做一个 Db.LoadReferences(person.Pants) 来加载口袋参考。
有什么方法可以自动加载所有嵌套引用,还是仅限于一层?
谢谢。
OrmLite 的 db.Load*
API 仅限于加载 1 级深度的引用。 Db.LoadReferences(instance)
可用于进一步获取断开连接的 POCO 的引用。
您还应该注意单独加载引用以避免通过在循环中加载它们来避免 N+1 查询,即在可能的情况下最好使用单个查询来获取相关的记录以避免多次数据库命中。