一直在关注三个开源的ORM。一是NHibernate,一是Gentle.NET,还有一个是iBatis.net。NHibernate够强大,可惜使用起来实在是太过复杂,门槛比较高。Gentle.NET是基于.NET反射机制的持久层,使用起来相对简单,并且目前的版本(1.2.5)已经比较稳定。iBatis.net被戏称是一种半自动化的ORM,SQL语句直接在XML里头配置,而不是靠持久层生成。这种方式应该说是非常的灵活,并且使用者的控制力度比较大,毕竟,SQL语句是自己写的,不需要在担心ORM生成SQL语句的性能问题。然而,当我看到,的配置文件就傻眼了,要写好多的额外的XML,并且好像还没用代码生成器支持它,还不如用Data Access Block来的直接。
今天拿Gentle.NET开刀,用MyGeneration对Sql Server的Northwind数据库生成了一下代码,感觉还相当凑活!业务对象类生成的相当漂亮,当然这也有可能跟Northwind本身毕竟简单而且设计也毕竟规范有关。接下来担心的是对复杂查询的支持,以及在必要的情况下,是否可以直接执行SQL语句和存储过程。折腾一个晚上,挤出几行代码来,不知道有没有更加简单的?代码放出来:
GentleSqlFactory sqlFact = Broker.GetSqlFactory();
IDbCommand cmd = sqlFact.GetCommand();
cmd.CommandType = CommandType.StoredProcedure;
IDataParameter param = cmd.CreateParameter();
param.ParameterName = sqlFact.GetParameterPrefix() + "CustomerId" + sqlFact.GetParameterSuffix();
param.Value = "ALFKI";
cmd.Parameters.Add(param);
SqlStatement sqlStat = new SqlStatement(Gentle.Framework.StatementType.Unknown, cmd, "CustOrderHist");
SqlResult sqlRes = Broker.Execute(sqlStat);
dataGrid1.DataSource = ObjectView.GetDataView(sqlRes);