使用引用查询 POCO

本文关键字:POCO 查询 引用 | 更新日期: 2023-09-27 18:36:56

我有以下(简化的)数据模型:

public class Order : IHasId<long>
{
    [AutoIncrement]
    public long Id { get; set; }
    [References(typeof(Material))]
    public long MaterialId { get; set; }
    [Reference]
    public Material Material { get; set; }
}
public class Material : IHasId<long>
{
    [AutoIncrement]
    public long Id { get; set; }
    public string Name { get; set; }
}

我想要实现的是用MaterialId引用的材料填充Order.Material,有没有办法以简单的方式实现这一目标?加载 API 似乎做了类似的事情,但在相反的情况下(当引用在 Material 上而不是在 Order 上时)

使用引用查询 POCO

这在 OrmLite 中称为自我引用,适用于上述示例:

public class Order : IHasId<long>
{
    [AutoIncrement]
    public long Id { get; set; }
    [References(typeof(Material))]
    public long MaterialId { get; set; }
    [Reference]
    public Material Material { get; set; }
}
public class Material : IHasId<long>
{
    [AutoIncrement]
    public long Id { get; set; }
    public string Name { get; set; }
}
db.Insert(new Material { Name = "A" });
db.Insert(new Material { Name = "B" });
db.Insert(new Order {
    MaterialId = 2,
});
var order = db.LoadSingleById<Order>(1);
order.PrintDump(); 

递归打印对象图以输出:

{
    Id: 1,
    MaterialId: 2,
    Material: 
    {
        Id: 2,
        Name: B
    }
}