与NHibernate相比较,Linq可能并是领域模型的,有数据为中心的思维痕迹,但在语言集成性上面,是其它O/R方案没有可比性的,Linq不仅仅是为对象与关系转换而生,随着Linq技术的日渐成熟,将会在诸多方面有所表现。
开源社区也非常看好Linq的发展前景,在Linq推出后开源界出现了数十种有关Linq的项目,比如DbLinq(Linq to MySql,Oracle,SQLite),Linq to NHibernate,甚至还有Linq to google等等,这些项目从不同的应用和不同的角度展示出Linq的魅力。
因为关注mono原因,时不时会了解一下mono的最新进展,当然也非常想看到Linq在mono中的应用,不过在mono1.2.6并没有集成,在下一个版本中肯定会有所表现。在Miguel de Icaza的博客中提到了一个DbLinq2007项目,可能会用于mono,目前最高版本是v0.16,试了一下,在vs.net2008beta2环境中的确能用,可到http://code.google.com/p/dblinq2007/下载,目前下载量不到千人,可以先下载尝尝鲜。
DbLinq2007项目包括DbLinq.SqlServer/DbLinq.MySql/DbLinq.Oracle/DbLinq.PostgreSql/
DbLinq.Sqlite几个部分,各部分相对独立的,本人试用了DbLinq.PostgreSql和DbLinq.MySql感觉非常不错,使用非常方便,使用方式也差不多,同Ms的Linq to Sql也几乎没有什么区别。下面以Northwind数据库为例,仅介绍一下DbLinq.MySql的简单应用。
一、在MySql中建立用户与数据库:
1、 建立用户LinqUser:
CREATE USER 'LinqUser'@'%'; SET PASSWORD FOR 'LinqUser'@'%' = PASSWORD('LinqUser');
##
GRANT Select, Insert, Update, Delete, EXECUTE ON `Northwind`.* TO 'LinqUser'@'%';
FLUSH PRIVILEGES;
2、 以LinqUser登录建立数据库Northwind:
/*
MySQL Data Transfer
Source Host: localhost
Source Database: northwind
Target Host: localhost
Target Database: northwind
Date: 2008-1-24 22:23:29
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for categories
-- ----------------------------
CREATE TABLE `categories` (
`CategoryID` int(11) NOT NULL auto_increment,
`CategoryName` varchar(15) NOT NULL,
`Description` text,
`Picture` blob,
PRIMARY KEY (`CategoryID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- ----------------------------
-- Table structure for customers
-- ----------------------------
CREATE TABLE `customers` (
`CustomerID` varchar(5) NOT NULL,
`CompanyName` varchar(40) NOT NULL default '',
`ContactName` varchar(30) default NULL,
`ContactTitle` varchar(30) default NULL,
`Address` varchar(60) default NULL,
`City` varchar(15) default NULL,
`Region` varchar(15) default NULL,
`PostalCode` varchar(10) default NULL,
`Country` varchar(15) default NULL,
`Phone` varchar(24) default NULL,
`Fax` varchar(24) default NULL,
PRIMARY KEY (`CustomerID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
-- ----------------------------
-- Table structure for employees
-- ----------------------------
CREATE TABLE `employees` (
`EmployeeID` int(11) NOT NULL auto_increment,
`LastName` varchar(20) NOT NULL,
`FirstName` varchar(10) NOT NULL,
`Title` varchar(30) default NULL,
`BirthDate` datetime default NULL,
`HireDate` datetime default NULL,
`Address` varchar(60) default NULL,
`City` varchar(15) default NULL,
`Region` varchar(15) default NULL,
`PostalCode` varchar(10) default NULL,
`Country` varchar(15) defau