1

次のテーブルがあります

クライアント テーブルと製品テーブル

ID
Name

ClientProduct テーブル

ID
ClientID
ProductID

製品クラス

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

クライアントクラス

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

petaPOCO で次のことを行うにはどうすればよいですか?

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

そのクライアントのすべての製品のリストを取得できるように、後でビューで使用します

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

1 に答える 1

0

1:M および M:1 の関係は、 http://www.toptensoftware.com/Articles/115/PetaPoco-Mapping-One-to-Many-and-Many-to-One-Relationshipsを求めているように見え ます

カスタム リレーター コールバックを定義できます。Brad の 2 つのテーブルの例 (製品がクライアントに直接マッピングされている場合) は、次のようになります。

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

M:M の関係を扱っていることは理解していますので、上記を更新して 3 つのオブジェクト間でマッピングする必要がありますが、概念は同じです。重要なのは、呼び出しの 3 番目の引数 (ClientProduct) が結合された行を表し、クライアントや製品を単一のリストから直接参照できることです。

于 2012-02-11T04:01:27.823 に答える