posts - 165,  comments - 876,  trackbacks - 41

       这个组件是从NClay.Data基础功能分离出来,主要功能以下功能:一致的数据库访问方式,基于接口的数据库提供者扩展,基于线程的连接对象句柄可以简单实现跨方法的数据库事务处理能力;组件配备6个数据库连接设置通过DBContext的不同版本的Region方法来进行不同数据库操作。

组件才用Apache License 2.0协议。

辅助工具:迟下将会提供一个Code Generator用于实现简单描述XML生成基于组件的Entity数据操作方式,在代码例程用使用该Code Generator的简单测试(由于这东西并不是组件必须,所以暂时不提供;不过有需要的朋友可以联系我)

组件结构和处理图

 


    普通代码操作方式

            DBContext.Region(e => {

                Command cmd = new Command("select * from employees");

                Console.WriteLine("Select Employee:");

                using (IDataReader reader = e.ExecuteReader(cmd))

                {

                    while (reader.Read())

                    {

                        Console.WriteLine("\t"+reader["firstname"]);

                    }

 

                }

                Console.WriteLine("Select Orders:");

                cmd = new Command("select * from orders");

                using (IDataReader reader = e.ExecuteReader(cmd))

                {

                    while (reader.Read())

                    {

                        Console.WriteLine("\t" + reader["orderid"] +"\t" + reader["orderdate"]);

                    }

                }

                cmd = new Command("select * from orders where orderdate >=@p1 and orderdate<@p2");

                cmd.AddParameter("p1", "1996-1-1");

                cmd.AddParameter("p2", "1997-1-1");

                using (IDataReader reader = e.ExecuteReader(cmd))

                {

                    while (reader.Read())

                    {

                        Console.WriteLine("\t" + reader["orderid"] + "\t" + reader["orderdate"]);

                    }

                }

            });

基于Code Generator的操作方式

            DBContext.Region(e =>

            {

                int id;

                WhereBody exp;

                Employees emp = Employees.Load(e, 3);

                Console.WriteLine(emp.FirstName +"\t" + emp.LastName);

                emp.LastName = "henry";

                emp.Save(e);

                emp = Employees.Load(e, 3);

                Console.WriteLine(emp.FirstName + "\t" + emp.LastName);

                emp = new Employees();

                emp.FirstName = "fan";

                emp.LastName = "henry";

                emp.Save(e);

                id = emp.EmployeeID;

                emp = Employees.Load(e,id);

                Console.WriteLine(emp.FirstName + "\t" + emp.LastName);

                emp.Delete(e);

                emp = Employees.Load(e, id);

                Console.WriteLine(emp == null);

 

               IList<CountOrderByMonth> items = CountOrderByMonth.List(e, null, null, null);

                foreach(CountOrderByMonth item in items)

                {

                    Console.WriteLine(item.Year.ToString("0000")+item.Month.ToString("00") + ":\t" + item.Count);

                }

                exp = new WhereBody();

                exp.AddExpression("Employeeid =@p1");

                exp.AddParameter("p1", 3);

                items = CountOrderByMonth.List(e, exp, null, null);

                foreach (CountOrderByMonth item in items)

                {

                    Console.WriteLine(item.Year.ToString("0000") + item.Month.ToString("00") + ":\t" + item.Count);

                }

 

            });

下载组件源代码

Code Generator演示

posted on 2008-07-12 15:39 henry 阅读(1602) 评论(7)  编辑 收藏

FeedBack:
2008-07-12 21:20 | 蛙蛙池塘      
那个示意图是用pd画的吗?还是用word画的呀?
  回复  引用  查看    
#2楼 [楼主]
2008-07-12 21:26 | henry      
用word搞了。。。因为想画的时候发现电脑竟然没有UML等工具...
  回复  引用  查看    
2008-07-13 15:35 | 金色海洋(jyk)      
弱弱的问一下,lz使用的ado.net是1.0的还是2.0的?

好复杂呀。

  回复  引用  查看    
#4楼 [楼主]
2008-07-13 16:05 | henry      
@金色海洋(jyk)
2.0
这是实现一个持久层的最基础部分,相对NClay.Data来说已经简化了不少。
不过其发挥的作用也不是很明显毕竟没有操作上的简化。
但在其基础上到底能发挥怎的作用可以看以下的一个扩展
http://www.cnblogs.com/henryfan/archive/2008/07/13/1241890.html
  回复  引用  查看    
2008-07-13 18:47 | bidaas      
既然Entity可以Load,如果实现EntityList<Employees> empList = new EntityList(e);或empList.Load(e)岂不方便一点点?
  回复  引用  查看    
#6楼 [楼主]
2008-07-13 18:54 | henry      
@bidaas
按理是的。
但你会发现EntityBase所有可操作的方法都是protected,之于为什么这样干你看一下SmallData.VSGenerator的显示就能明白。
  回复  引用  查看    
2008-07-14 00:28 | 本园第一神棍      
强烈支持henry发布开源新作,UP
  回复  引用  查看    

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-07-12 16:48 编辑过
 
 


<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

寻求伯乐,限广州地区有意联系


与我联系

搜索

 

常用链接

留言簿(20)

我参加的小组

我的标签

随笔分类

最新评论

  • 1. re: JQuery实现自定义对话框
  • 你好 我是出版社的编辑,我看到你博客中的内容,感觉写的非常好,如果想把这些内容和更多的人分享,可以和我联系,把这些东西写成书。 我的邮箱:books_522008@yahoo.com.cn ...
  • --庞永庆
  • 2. re: 如何设计业务逻辑?
  • 我赞成定义,这需要丰富的应用经验。 --引用-------------------------------------------------- Ivony...: --引用------------...
  • --Kai.Ma
  • 3. re: 如何设计业务逻辑?
  • 针对LZ提出的,我们如何知道做出来的东西能满足以后的需要呢? 我自己的感觉,在满足自己目前的前提下,留一些适当的余地。 当有新的需求提出,重新检查下有无类似的代码? 如果有,而且发现重写一个新的方...
  • --思考-总结
  • 4. re: 如何设计业务逻辑?
  • 学习了

    第一种,要调整参数,感觉改起来麻烦
    第二种,感觉好很多
  • --未公布
  • 5. re: 如何设计业务逻辑?
  • 看文章,看评论,颇多收获!
  • --水言木

60天内阅读排行