【NPoco】一对多查询操作

ORM库:NPoco

GitHub:https://github.com/schotime/NPoco

我Fork了一份在gitee:https://gitee.com/sesametech-group/NPoco

今天介绍实现一个一对多的关联查询功能

首先添加数据库表格:

CREATE TABLE `one` (
	`OneId` INT(11) NOT NULL AUTO_INCREMENT,
	`Name` VARCHAR(50) NULL DEFAULT NULL,
	PRIMARY KEY (`OneId`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=4
;
CREATE TABLE `many` (
	`ManyId` INT(11) NOT NULL AUTO_INCREMENT,
	`OneId` INT(11) NULL DEFAULT NULL,
	`Value` INT(11) NULL DEFAULT NULL,
	`Currency` VARCHAR(50) NULL DEFAULT NULL,
	PRIMARY KEY (`ManyId`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=6
;

建立实体类:

    [TableName("One"),PrimaryKey("OneId")]
    public class One
    {
        public int OneId { get; set; }
        public string Name { get; set; }
        [ResultColumn,ComplexMapping]
        public NestedClass Nested { get; set; }
        [Reference(ReferenceType.Many,ColumnName = "OneId",ReferenceMemberName = "OneId")]
        public ListMany Items { get; set; }
    }

    public class NestedClass
    {
        public string Name { get; set; }
    }

    public class ListMany : List<Many>
    {

    }

    [TableName("Many"),PrimaryKey("ManyId")]
    public class Many
    {
        public int ManyId { get; set; }
        [Reference(ReferenceType.OneToOne,ColumnName = "OneId",ReferenceMemberName = "OneId")]
        public One One { get; set; }

        public int OneId { get; set; }
        public int Value { get; set; }
        public string Currency { get; set; }
    }

在 One 类中新添加了一个属性:Nested,类型为CLASS,并在类中添加了类型为ListMany的Items属性。

通过如下的语句实现一对多查询:

第一行代码:实现了一对多查询,但是属性Nested没有值

第二行代码:实现了一对多查询,并在sql中添加了地段:nested__name,并把常量“MyName“赋给了nested__name

var ones = database.FetchOneToMany<One>(x => x.Items, @"select o.*, m.* from ONE o left join many m on o.oneid = m.oneid");
var x2= database.FetchOneToMany<One>(x => x.Items,
                "select o.*, 'MyName' nested__name, null npoco_items, m.* from ONE o left join many m on o.oneid = m.oneid");

一、 第一个查询结果

1.1 数据库根据语句查询结果

1.2 程序通过监视器可以看到其中的结果如下图所示:

二、第二个查询结果

2.1 数据库根据语句查询结果

2.2 通过监视器可以看到其中的结果如下图所示:

根据一和二可以看到,查询到了我们想要的结果 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值