EnterpriseLibrary数据访问(4)使用数据访问器接收数据
代码下载: 敏捷学院技术资源库
1.引用
1
|
// TODO: Use Enterprise Library Data Block
|
2
|
|
3
|
using Microsoft.Practices.EnterpriseLibrary.Data;
|
4
|
|
5
|
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
|
2.创建访问器
1
|
// TODO: Create private fields for Data accessors
|
2
|
|
3
|
private DataAccessor<Category> categoryAccessor;
|
4
|
|
5
|
private DataAccessor<Product> productAccessor;
|
3. 初始化访问器
001
|
private void InitializeAccessors()
|
002
|
{
|
003
|
|
004
|
Database db = EnterpriseLibraryContainer.Current.GetInstance<Database>();
|
005
|
|
006
|
// TODO: Create category accessor 使用存储过程
|
007
|
|
008
|
categoryAccessor = db.CreateSprocAccessor( "GetCategories" ,
|
009
|
|
010
|
MapBuilder<Category>.MapAllProperties()
|
011
|
|
012
|
.Map(p => p.Name).ToColumn( "CategoryName" )
|
013
|
|
014
|
.Map(p => p.ID).ToColumn( "CategoryID" )
|
015
|
|
016
|
.Build());
|
017
|
|
018
|
|
019
|
// TODO: Create product accessor 使用sql语句
|
020
|
|
021
|
productAccessor =
|
022
|
|
023
|
db.CreateSqlStringAccessor(
|
024
|
|
025
|
"SELECT ProductID,ProductName,UnitPrice,LastUpdate FROM Products WHERE CategoryID=@CategoryID" ,
|
026
|
|
027
|
new GetProductsByIdParameterMapper(db),
|
028
|
|
029
|
MapBuilder<Product>
|
030
|
|
031
|
.MapAllProperties()
|
032
|
|
033
|
.Map(p => p.Name).ToColumn( "ProductName" )
|
034
|
|
035
|
.Map(p => p.ID).ToColumn( "ProductID" )
|
036
|
|
037
|
.Map(p => p.UnitPrice).WithFunc(ApplyTax) //对价格的单独处理
|
038
|
|
039
|
.DoNotMap(p => p.LastReviewed) //不映射这个字段
|
040
|
|
041
|
|
042
|
|
043
|
.Build());
|
044
|
|
045
|
}
|
046
|
|
047
|
|
048
|
private decimal ApplyTax(IDataRecord record)
|
049
|
|
050
|
{
|
051
|
|
052
|
var unitPrice = ( decimal )record[ "UnitPrice" ];
|
053
|
|
054
|
if (numTax.Value > 0)
|
055
|
|
056
|
{
|
057
|
|
058
|
unitPrice += unitPrice * numTax.Value / 100;
|
059
|
|
060
|
}
|
061
|
|
062
|
return unitPrice;
|
063
|
|
064
|
}
|
065
|
|
066
|
|
067
|
|
068
|
//生成sql参数的类
|
069
|
|
070
|
public class GetProductsByIdParameterMapper : IParameterMapper
|
071
|
|
072
|
{
|
073
|
|
074
|
private readonly Database db;
|
075
|
|
076
|
public GetProductsByIdParameterMapper(Database db)
|
077
|
|
078
|
{
|
079
|
|
080
|
this .db = db;
|
081
|
|
082
|
}
|
083
|
|
084
|
public void AssignParameters(System.Data.Common.DbCommand command, object [] parameterValues)
|
085
|
|
086
|
{
|
087
|
|
088
|
InitializeParameters(command);
|
089
|
|
090
|
db.SetParameterValue(command, "@CategoryID" , parameterValues[0]);
|
091
|
|
092
|
|
093
|
|
094
|
}
|
095
|
|
096
|
|
097
|
private void InitializeParameters(System.Data.Common.DbCommand command)
|
098
|
|
099
|
{
|
100
|
|
101
|
db.AddInParameter(command, "@CategoryID" , System.Data.DbType.Int32);
|
102
|
|
103
|
}
|
104
|
|
105
|
}
|
4. 执行返回数据
01
|
// TODO: Use a Data Accessor to retrieve Categories
|
02
|
|
03
|
var categories = categoryAccessor.Execute();
|
04
|
|
05
|
cmbCategory.DataSource = categories.ToList();
|
06
|
|
07
|
// TODO: Retrieve Products by Category
|
08
|
|
09
|
var selectedCategory = (Category)cmbCategory.SelectedItem;
|
10
|
|
11
|
if (selectedCategory == null )
|
12
|
|
13
|
return ;
|
14
|
|
15
|
var products = productAccessor.Execute(selectedCategory.ID);
|
16
|
|
17
|
dgProducts.DataSource = products.ToList();
|
附 简单总结:如果数据库中的字段和实体字段的名称相同
01
|
//#1
|
02
|
|
03
|
using Microsoft.Practices.EnterpriseLibrary.Data;
|
04
|
|
05
|
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
|
06
|
|
07
|
//#2
|
08
|
|
09
|
private Database db = EnterpriseLibraryContainer.Current.GetInstance<Database>();
|
10
|
|
11
|
private DataAccessor<Product> productAccessor;
|
12
|
|
13
|
//#3
|
14
|
|
15
|
private List<Product> GetProducts()
|
16
|
|
17
|
{
|
18
|
|
19
|
|
20
|
|
21
|
productAccessor =
|
22
|
|
23
|
db.CreateSqlStringAccessor(
|
24
|
|
25
|
"SELECT ProductID as id,ProductName,UnitPrice,LastUpdate FROM Products" ,
|
26
|
|
27
|
MapBuilder<Product>
|
28
|
|
29
|
.MapAllProperties()
|
30
|
|
31
|
//.Map(p=>p.ID).ToColumn("ProductID")
|
32
|
|
33
|
.DoNotMap(p=>p.CategoryID) //不映射这个字段
|
34
|
|
35
|
.Build()
|
36
|
|
37
|
);
|
38
|
|
39
|
|
40
|
|
41
|
return productAccessor.Execute().ToList();
|
42
|
|
43
|
}
|
转载于:https://www.cnblogs.com/xingquan/archive/2011/07/08/2100916.html
EnterpriseLibrary数据访问(4)使用数据访问器接收数据相关推荐
- 基于BC95的数据转发,利用Python实现UDP接收数据,TCP转发数据
基于BC95的数据转发,利用Python实现UDP接收数据,TCP转发数据 文章信息 环境信息 系统概览 基于Python的UDP(服务端)数据接收 1. UDP接受的数据如何读取 文章信息 撰写日期 ...
- 大数据之-Hadoop3.x_Yarn_公平调度器---大数据之hadoop3.x工作笔记0146
然后我们再来看公平调度器,公平调度器是facebook开发的一个调度器, 上面的容量调度器是雅虎开发的对吧. 然后我们看看公平调度器的特点,可以看到,它要做到的就是公平,他也可以有多个队列,但是同一个 ...
- 大数据之-Hadoop3.x_Yarn_容量调度器---大数据之hadoop3.x工作笔记0145
然后我们再来看一下capacity scheduler,这个是Apache hadoop的默认调度器. 可以看到这个容量调度器,是yahoo雅虎开发的一个多用户调度器,多个用户都可以 把任务发过来对吧 ...
- python 抓网卡数据包_Python选择网卡发包及接收数据包
当一台计算机上有多个网卡时,需要选择对应IP地址的网卡进行发送数据包或者接受数据包. 1.选择网卡发包(应用scapy):plface=conf.route.route("××.××.××. ...
- axios传递数据到java_axios 传输与springboot后台接收数据
axios 使用不再说明,直指常见问题元凶: 1.get(url[, config])和post(url[, data[, config]]),注意参数 get是在config中设置params{pa ...
- 监视和调整Linux网络协议栈:接收数据
Table of Contents 有关监视和调整Linux网络协议栈的建议 总览 详细外观 网络设备驱动程序 初始化 网络设备初始化 启动网络设备 监控网络设备 调整网络设备 SoftIRQ 什么是 ...
- 网络——在网络上发送,接收数据
问题 创建并加入一个网络会话是一回事,但如果不能发送或接收任何数据那么网络会话有什么用呢? 解决方案 当玩家连接到会话时,你可以在一个PacketWriter流中存储所有想要发送的数据.完成这个操作后 ...
- 监控和调整Linux网络协议栈的图解指南:接收数据
Table of Contents 入门 最初设定 数据到达 网络数据处理开始 网络数据处理继续 协议栈和用户态套接字 结论 监视和调整Linux网络协议栈:接收数据(图解):https://rtoa ...
- 前台传递JSON数据,后台spring mvc如何接收数据
如何传递JSON数据到后台? 方式一, 使用post请求,请求类型为:application/x-www-form-urlencoded; charset=UTF-8 $.ajax({url : ur ...
最新文章
- 从IEEE754标准谈C语言浮点数据类型
- Windows下给PHP安装redis扩展
- 数据库视频(三)——总结篇
- Origin使用手册/笔记第二部分:数据的录入
- BZOJ.3495.[PA2010]Riddle(2-SAT 前缀优化建图)
- 6个用好大数据的秘诀
- 做出产品不难,做好产品必须高手
- 计算机网络 组网设计 论文,计算机网络组网毕业设计(校园局域网设计毕业论文)...
- C++执行shell命令
- 计算机组成原理第一章练习题(答案详解)
- c语言程序设计银行存取款管理系统,银行存取款管理系统设计
- winform打包应用程序-setup安装包
- 抠图算法(交互式)以及证件照的自动抠图
- Java 常量池详解(一)字符串常量池
- java 视频边下边播_video src,如何边加载边播放?
- svn执行update操作后出现:Error : Previous operation has not finished; run 'cleanup' if it was interrupted.
- R7-7735HS和i5-13500H 差距 锐龙R77735HS和酷睿i513500H对比
- 数值分析基础工具使用Matlab绘制双曲线
- 手机html特效菊花的彩铅画,彩铅教程 | 菊花的画法步骤
- 桌面一片空白(不显示图标)的盗号木马清除指南