【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 通过监视器可以看到其中的结果如下图所示:
根据一和二可以看到,查询到了我们想要的结果