2012-02-08 5 views
0

上のカラムに直接マップされない性質を扱う、私は以下の表データベース

クライアントテーブルおよび製品表

ID 
Name 

ClientProduct表

ID 
ClientID 
ProductID 

Productクラス

を持っています
private int id; 
    public int ID 
    { 
     get { return id; } 
     set { id = value; } 
    } 
    protected string name; 

    public Product() { } 

    public Product (string name) 
    { 
     this.name = name; 
    } 

    public Product (string name) 
    { 
     this.name = name; 
    } 
    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

のClientクラスIはpetaPOCOに次の操作を行うことができますどのように

 private int id; 
    public int ID 
    { 
     get { return id; } 
     set { id = value; } 
    } 
    protected string name; 

    public Client() { } 

    public Client (string name) 
    { 
     this.name = name; 
    } 

    public Client (string name) 
    { 
     this.name = name; 
    } 
    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

ClientProductクラス

 protected Client client; 
    protected Product product; 

    public ClientProduct () { } 

    public ClientProduct (Client client, Product product) 
    { 
     this.client= client; 
     this.product= product; 
    } 

    public Client client  { 
     get { return client; } 
     set { client= value; } 
    } 

    public Product product  { 
     get { return product; } 
     set { product= value; } 
    } 

public static System.Collections.Generic.IList<ClientProduct> LoadForClient(Client client) 
    { 
     if (null != client) 
      return Load("ClientID = " + client.ID); 
     else 
      return null; 
    } 

私は1私は後で

private void LoadProducts(Client client) 
    { 
     Products = ClientProduct.LoadForClient(client) 
      .Select(x => x.Product.Name) 
      .OrderBy(x => x).ToArray(); 
    } 

答えて

0

として私の見解で使用されますそのクライアントのすべての製品のリストを持つことができるよう:MとM:1人の関係は、あなたがしているもののように見えますafter http://www.toptensoftware.com/Articles/115/PetaPoco-Mapping-One-to-Many-and-Many-to-One-Relationships

カスタムリレーターコールバックを定義できます。 Mの関係を、あなたは全体のマッピングする上記を更新する必要がありますので:私はあなたがMを扱う実現

var posts = db.Fetch<Product, Client, ClientProduct>(
    (p,c)=> { p.client_obj = c; return p; }, 
    @"SELECT * FROM Product 
    LEFT JOIN Client ON Product.clientId = Client.id ORDER BY Product.clientId 
    "); 

:(あなたの製品は、クライアントに直接マッピングされている場合)は、2つのテーブルのためのブラッドの例は、このようになります3つのオブジェクトが、概念は同じです。キーは、呼び出しの3番目の引数(ClientProduct)が結合された行を表しているため、単一のリストからクライアントおよび/または製品を直接参照できることです。

関連する問題