2017-12-16 32 views
1

SQL Server用にService Stack ORMLiteを使用し始めましたが、いくつか考え出すことができませんでした。私は私が達成しようとしているものを、一例でお見せしましょう:ServiceStack OrmLite多対1リレーションシップ

私は2つのテーブルがある - ユーザーとロール

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

ユーザーのみ1役割に属することができます。しかし、多くのユーザーも同じ役割の一部になる可能性があります。例:

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

私はこのコード

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

を実行すると、私はユーザーが細かいオブジェクトを取得します。クエリでRolesオブジェクトを返すようにしたいのですが(私はRolesテーブルを別々に照会するのではなく)、どうすればいいですか?私はここで何が欠けていますか?私は "どのくらいのユーザーがXの役割を持っていますか?" (典型的な1 2このような多くの関係:ServiceStack OrmLite mapping with references not working)、代わりに私は "このユーザーの役割は何ですか?"ユーザーテーブルへのロールのプロパティを追加することにより、self references使用OrmLiteでサポートされている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; } 

    [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 
     } 
    } 
] 

実験できるLive example of this on Gistlynを作成しました。

+0

うわー!これは簡単でしたか?ありがとう、トン! – Ubaid

関連する問題