2015-01-09 81 views
1

我有以下的(簡化)數據模型:查詢POCO與參考

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; } 
} 

我想實現的是填充Order.MaterialMaterialId引用的材料,有沒有辦法實現,在一個簡單的方法?該Load APIs似乎做同樣的事情,但在相反的情況下(當參考是Material,而不是Order

回答

1

這在OrmLite稱爲Self References,並與上面的例子中的工作原理:

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 
    } 
} 
+0

謝謝。它只適用於'Load *'方法嗎? – 2015-01-09 22:59:58

+0

也有,有沒有辦法配置更深的嵌套?在文檔上說它只嵌套到第一級 – 2015-01-09 23:07:25

+0

@GiacomoTagliabue'Load *'API專門用於加載引用yes,當您不想加載引用時使用標準API。 POCO已斷開連接並僅支持1層嵌套。 – mythz 2015-01-09 23:46:19