<?
xml version="1.0" encoding="utf-8"
?>

<
hibernate-mapping
xmlns
="urn:nhibernate-mapping-2.0"
>

<
class
name
="NHibernateWebDemo.Model.User, NHibernateWebDemo.Model"
table
="users"
>

<
id
name
="Id"
column
="LogonId"
type
="String"
length
="20"
>

<
generator
class
="assigned"
/>

</
id
>

<
property
name
="UserName"
column
= "Name"
type
="String"
length
="40"
/>

<
property
name
="Password"
type
="String"
length
="20"
/>

<
property
name
="EmailAddress"
type
="String"
length
="40"
/>

<
property
name
="LastLogon"
type
="DateTime"
/>

</
class
>

</
hibernate-mapping
>
学习资源
二.NBear
园子里Teddy开发的NBear你们都很是熟悉,如今已经发布了3.0正式版。NBear包含的组件不只仅是数据持久层,还包含了IOC,分布式组件和Web组件。看一下Teddy对于NBear的介绍:
NBear
的核心包括一个泛型、强类型的的ORM数据持久化接口、一组相关的Entity相关组件、高性能分布式组件、Web组件,所以:
1
、NBear最适合开发各种基于ASP.NET 2.0,对性能要求较高的Web程序。NBear.Web组件提供了许多加速Web开发的组件,将使您基于标准 ASP.NET方式的开发效率大大提升;同时,简单易用、性能突出的泛型持久化支持,则将使您可以将更多注意力集中到业务开发,同时也不会有传统ORM持久化框架的性能问题和繁琐配置须要(NBear几乎不需手动配置,性能则接近DAAB)。
2
、基于MQ和.Net Remoting的高性能分布式组件,将使您开发和维护分布式程序更加容易。一个基于NBear.IoC模块的开发的应用程序甚至无需从新编译就能部属为真正的负载均衡的分布式程序。
3
、对于桌面应用程序,NBear一样是一个几乎没有什么学习曲线(多少人会为写一个小小的日历程序而仔细研究透彻Hibernate的参考手册?)、实用高效的数据持久化方案。
4
、随着NBearV3带来的全面的ORM支持、更详细的文档和教程,和全面的代码生成工具,NBear也已经能够被用于企业级程序开发。
学习资源
三.Castle ActiveRecord
ActiveRecord
是Castle中的一个子项目,如今的版本是RC1。它一样是一个很是优秀的持久层框架,在底层封装了NHibernate,改用Attribute来代替配置文件,这样就不用再像NHibernate那样去编写复杂的配置文件。以下代码片段所示:
[ActiveRecord(
"
Users
"
)]
public
class
User : ActiveRecordBase

{
private int _id;
private string _name;
private string _password;
private string _emailAddress;
private DateTime _lastLogon;
[PrimaryKey(PrimaryKeyType.Identity, "LogonID")]
public int Id

{

get
{ return _id; }

set
{ _id = value; }
}
[Property("LogonName")]
public string Name

{

get
{ return _name; }

set
{ _name = value; }
}
[Property("Password")]
public string Password

{

get
{ return _password; }

set
{ _password = value; }
}
[Property("EmailAddress")]
public string Address

{

get
{ return _emailAddress; }

set
{ _emailAddress = value; }
}
[Property("LastLogon")]
public DateTime LastLogon

{

get
{ return _lastLogon; }

set
{ _lastLogon = value; }
}
}
学习资源
TerryLee
的Castle开发系列:
四.iBATIS.NET
iBATIS.NET
分为DataMapper和DataAccess两部分,应该说DataMapper是这个框架的核心,DataMapper使用XML文件来实现从实体到SQL statements的映射,学习起来很是简单,是用DataMapper后,咱们能够自由的使用SQL语句或者存储过程;DataAccess容许咱们经过一个简单的接口来操做数据,而没必要了解底层实现的细节。以下代码片段:
[Serializable]
public
class
Person

{
private int id;
private string firstName;
private string lastName;
private DateTime? birthDate;
private double? weightInKilograms;
private double? heightInMeters;

public Person()
{ }
public int Id

{

get
{ return id; }

set
{ id = value; }
}
public string FirstName

{

get
{ return firstName; }

set
{ firstName = value; }
}
public string LastName

{

get
{ return lastName; }

set
{ lastName = value; }
}
public DateTime? BirthDate

{

get
{ return birthDate; }

set
{ birthDate = value; }
}
public double? WeightInKilograms

{

get
{ return weightInKilograms; }

set
{ weightInKilograms = value; }
}
public double? HeightInMeters

{

get
{ return heightInMeters; }

set
{ heightInMeters = value; }
}
}
映射文件以下:
<?
xml version="1.0" encoding="utf-8"
?>
<
sqlMap
namespace
="Person"
xmlns
="http://ibatis.apache.org/mapping"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
>
<
alias
>
<
typeAlias
alias
="Person"
type
="IBatisNetDemo.Domain.Person,IBatisNetDemo"
/>
</
alias
>

<
resultMaps
>
<
resultMap
id
="SelectAllResult"
class
="Person"
>
<
result
property
="Id"
column
="PER_ID"
/>
<
result
property
="FirstName"
column
="PER_FIRST_NAME"
/>
<
result
property
="LastName"
column
="PER_LAST_NAME"
/>
<
result
property
="BirthDate"
column
="PER_BIRTH_DATE"
/>
<
result
property
="WeightInKilograms"
column
="PER_WEIGHT_KG"
/>
<
result
property
="HeightInMeters"
column
="PER_HEIGHT_M"
/>
</
resultMap
>
</
resultMaps
>

<
statements
>
<
select
id
="SelectAllPerson"
resultMap
="SelectAllResult"
>
select
PER_ID,
PER_FIRST_NAME,
PER_LAST_NAME,
PER_BIRTH_DATE,
PER_WEIGHT_KG,
PER_HEIGHT_M
from PERSON
</
select
>

<
select
id
="SelectByPersonId"
resultClass
="Person"
parameterClass
="int"
>
select
PER_ID,
PER_FIRST_NAME,
PER_LAST_NAME,
PER_BIRTH_DATE,
PER_WEIGHT_KG,
PER_HEIGHT_M
from PERSON
where PER_ID = #value#
</
select
>
<
insert
id
="InsertPerson"
parameterclass
="Person"
>
<
selectKey
property
="Id"
type
="post"
resultClass
="int"
>
${selectKey}
</
selectKey
>
insert into Person
( PER_FIRST_NAME,
PER_LAST_NAME,
PER_BIRTH_DATE,
PER_WEIGHT_KG,
PER_HEIGHT_M)
values
(#FirstName#,#LastName#,#BirthDate#, #WeightInKilograms#, #HeightInMeters#)
</
insert
>
<
update
id
="UpdatePerson"
parameterclass
="Person"
>
<![CDATA[
update Person set
PER_FIRST_NAME =#FirstName#,
PER_LAST_NAME =#LastName#,
PER_BIRTH_DATE =#BirthDate#,
PER_WEIGHT_KG=#WeightInKilograms#,
PER_HEIGHT_M=#HeightInMeters#
where
PER_ID = #Id#
]]>
</
update
>

<
delete
id
="DeletePerson"
parameterclass
="Person"
>
delete from Person
where
PER_ID = #Id#
</
delete
>
</
statements
>
</
sqlMap
>
官方主页:[url]http://ibatis.apache.org/[/url]
学习资源
五.DAAB
DAAB
是微软Enterprise Library中的一个应用程序块,可以帮助咱们实现通用的数据访问,因此也把它列在这里介绍一下。DAAB使应用程序中的数据访问在不知道具体的数据库系统的状况下进行,相信不少朋友对DAAB都很熟性而且已经在项目中使用,就很少介绍了,看一个简单的代码片段:
public
string
GetCustomerList()

{
// 建立Database对象
Database db = DatabaseFactory.CreateDatabase();
// 使用SQL语句建立DbCommand对象
string sqlCommand = "Select CustomerID, Name, Address, City, Country, PostalCode " +
"From Customers";
DbCommand dbCommand = db.GetSqlStringCommand(sqlCommand);
StringBuilder readerData = new StringBuilder();
// 调用ExecuteReader方法
using (IDataReader dataReader = db.ExecuteReader(dbCommand))


{
while (dataReader.Read())

{
// Get the value of the 'Name' column in the DataReader
readerData.Append(dataReader["Name"]);
readerData.Append(Environment.NewLine);
}
}
return readerData.ToString();
}
学习资源
企业的帮助文档和Hands On Lab
附加介绍:
DLinq
DLinq
虽然不能算是开源框架,可是说到数据持久,仍是提一下比较好,DLinq是微软下一代数据库集成查询语言,在这以前微软曾经尝试过ObjectSpace,最后是不了了之。DLinq实现的方式有点相似于前面说过的ActiveRecord,不支持使用外部的XML配置文件,而是使用了Attribute的方式,以下代码片段所示:
[Table(Name
=
"
Customers
"
)]

public
class
Customer


{

[Column(Id=true)]

public string CustomerID;

[Column]

public string City;

}
学习资源
最后值得一提的是,微软又推出个Ado.net vNext,使用映射文件来配置,更加相似于NHibernate。关于持久层框架,还有不少,这里就再也不介绍了,如Grove等。
Ctrl+Enter 发布web
发布sql
取消数据库