1

我有以下表格

客户表和产品表

ID
Name

客户产品表

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

客户产品类

        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 的两个表示例(如果您的产品直接映射到客户端)如下所示:

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 关系,因此您需要更新上述内容以映射三个对象,但概念是相同的。关键是调用中的第三个参数 (ClientProduct) 代表连接的行,然后您可以直接从单个列表中引用 Client 和/或 Products。

于 2012-02-11T04:01:27.823 回答