EnterpriseLibrary数据访问(4)使用数据访问器接收数据

代码下载: 敏捷学院技术资源库

1.引用

1// TODO: Use Enterprise Library Data Block
2  
3using Microsoft.Practices.EnterpriseLibrary.Data;
4  
5using 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. 初始化访问器

001private 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  
03using Microsoft.Practices.EnterpriseLibrary.Data;
04  
05using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
06  
07 //#2
08  
09private Database db = EnterpriseLibraryContainer.Current.GetInstance<Database>();
10  
11private DataAccessor<Product> productAccessor;
12  
13//#3
14  
15private 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值