2017-12-16 8 views
1

Ich habe gerade begonnen, Service Stack ORMLite für SQL Server und nicht in der Lage, ein paar Dinge herauszufinden. Lassen Sie mich Sie mit gutem Beispiel zeigen, was ich zu erreichen versuchen:ServiceStack OrmLite Viele zu One-Beziehung

Ich habe 2 Tabellen - Benutzer und Rollen

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

Ein Benutzer nur 1 Rolle gehört. Aber viele Benutzer können auch Teil derselben Rolle sein. Beispiel:

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

Wenn ich diesen Code ausführen

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

ich die Nutzer in Ordnung widersprechen. Ich möchte, dass die Abfrage auch das Roles-Objekt zurückgibt (statt dass ich die Roles-Tabelle separat abfrage), wie mache ich das? Was fehlt mir hier? Ich möchte nicht "Wie viele Benutzer haben X Rolle?" (Typical One 2 Many Beziehung so: ServiceStack OrmLite mapping with references not working), stattdessen möchte ich "Was ist die Rolle dieses Benutzers?"

Antwort

2

kann ein Benutzer nur 1 Rolle gehört, ist eine 1: 1 Beziehung, die in OrmLite mit self references unterstützt wird durch das Hinzufügen einer Rollen-Eigenschaft auf Ihre Tabelle Benutzer, zB: wenn

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

die dann bevölkert werden mit Load* APIs, zB:

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(); 

Welche Benutzer druckt 1 und Rolle 1:

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

Ich habe eine Live example of this on Gistlyn erstellt, mit der Sie experimentieren können.

+0

Wow! Es war so einfach? Danke vielmals!!! – Ubaid

Verwandte Themen