2015-01-09 4 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; } 
} 

내가 달성하고자하는 MaterialId에 의해 참조 물질과 Order.Material을 채울 것입니다있다 ? Load APIs 비슷한 뭔가를 보이지만, 역 상황에서이 OrmLite에 Self References라고하고 위의 예제와 함께 작동합니다

답변

1

(참조하지 OrderMaterial에있을 때) : 재귀

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 *'메소드에서만 작동합니까? –

+0

또한 깊이 중첩을 구성하는 방법이 있습니까? 문서에서는 첫 번째 레벨에만 중첩한다고 말합니다. –

+0

@GiacomoTagliabue 'Load *'API는 특별히 참조를로드하기위한 것입니다. 예, 참조를로드하지 않으려는 경우 표준 API를 사용하십시오. POCO는 연결이 끊어졌으며 1 레벨의 중첩 만 지원합니다. – mythz