2017-12-16 26 views
1

SQL Server 용 서비스 스택 ORMLite를 사용하기 시작 했으므로 몇 가지 사항을 알 수 없습니다. 제가 달성하기 위해 노력하고 무엇을, 모범을 보여주지 :ServiceStack OrmLite 다 대 일 관계

내가 2 개 테이블이 - 사용자는 1 역할에 속할 수 있습니다 사용자 및 역할

public partial class Users : IHasId<int> 
{ 
[AutoIncrement] 
public int Id { get; set; } 
[Required] 
public string Email { get; set; } 
[Required] 
public string Password { get; set; } 
[References(typeof(Roles))] 
[Required] 
public int RolesId { get; set; } 
} 

public partial class Roles : IHasId<int> 
{ 
[AutoIncrement] 
public int Id { get; set; } 
[Required] 
public string Name { get; set; } 
} 

합니다. 그러나 많은 사용자가 동일한 역할에 속할 수도 있습니다. 예 :이 코드

db.LoadSelect<Users>(x => x.Id == 1); 

을 실행하면

User 1 - Role 1 
User 2 - Role 1 
User 3 - Role 2 

내가 사용자가 좋은 개체를 얻을. 나는 (역할 테이블을 별도로 쿼리하는 대신) Roles 개체를 쿼리가 반환하도록하고 싶습니다. 어떻게해야합니까? 내가 여기서 무엇을 놓치고 있니? 나는 "얼마나 많은 사용자가 X 역할을 갖고 싶습니까?" (Typical One 2 Many relationship like this : ServiceStack OrmLite mapping with references not working) 대신에 "이 사용자의 역할은 무엇입니까?" 귀하의 사용자 테이블에 역할 속성을 추가하여 self references 사용 OrmLite에서 지원 한 관계, 예를 들면 :

public partial class Users : IHasId<int> 
{ 
    [AutoIncrement] 
    public int Id { get; set; } 
    [Required] 
    public string Email { get; set; } 
    [Required] 
    public string Password { get; set; } 

    [References(typeof(Roles))] 
    [Required] 
    public int RolesId { get; set; } 

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

public partial class Roles : IHasId<int> 
{ 
    [AutoIncrement] 
    public int Id { get; set; } 

    [Required] 
    public string Name { get; set; } 
} 

다음 채워집니다

답변

2

사용자는 1 개 역할에 속할 수는 1 Load* API를 사용하여, 예를 들면 :

db.CreateTable<Roles>(); 
db.CreateTable<Users>(); 

db.Insert(new Roles { Name = "Role 1" }); 
db.Insert(new Roles { Name = "Role 2" }); 

db.Insert(new Users { Email = "[email protected]", Password = "test", RolesId = 1 }); 
db.Insert(new Users { Email = "[email protected]", Password = "test", RolesId = 1 }); 
db.Insert(new Users { Email = "[email protected]", Password = "test", RolesId = 2 }); 

var user1 = db.LoadSelect<Users>(x => x.Id == 1); 

user1.PrintDump(); 

사용자 1과 역할 1 출력합니다 :

[ 
    { 
     Id: 1, 
     Email: [email protected], 
     Password: test, 
     RolesId: 1, 
     Roles: 
     { 
      Id: 1, 
      Name: Role 1 
     } 
    } 
] 
012,351을

실험 할 수있는 Live example of this on Gistlyn을 만들었습니다.

+0

와우! 이게 단순한거야? 엄청 고마워!!! – Ubaid