小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

- .NET開源項(xiàng)目介紹及資源推薦:數(shù)據(jù)持久層 -

 hongmu 2006-12-02
.NET開源項(xiàng)目介紹及資源推薦:數(shù)據(jù)持久層    [ 日期:2006-12-02 ]   [ 來自:terryLee ]

在.NET平臺下,關(guān)于數(shù)據(jù)持久層框架非常多,本文主要對如下幾種做簡要的介紹并推薦一些學(xué)習(xí)的資源:

1.NHibernate

2.NBear

3.Castle ActiveRecord

4.iBATIS.NET

5.DAAB

附加介紹:DLinq

 

一.NHibernate

提起NHibernate,相信大家都不陌生,NHibernate來源于非常優(yōu)秀的基于Java的Hibernate關(guān)系型持久化工具,它從數(shù)據(jù)庫底層來持久化.Net對象到關(guān)系型數(shù)據(jù)庫,NHibernate為我們完成這一切,而不用自己寫SQL語句去操作數(shù)據(jù)庫對象,所寫的代碼僅僅和對象關(guān)聯(lián),NHibernat自動(dòng)產(chǎn)生SQL語句,并確保對象提交到正確的表和字段中去.大量減少開發(fā)時(shí)人工使用SQL和ADO.NET處理數(shù)據(jù)的時(shí)間. NHibernate可以幫助消除或者包裝那些針對特定數(shù)據(jù)庫的SQL代碼,并且把結(jié)果集從表格的表示形式轉(zhuǎn)換到一系列的對象去。NHibernate采用XML文件配置的方式,每一個(gè)實(shí)體類都會(huì)對應(yīng)一個(gè)映射文件,如下面的例子:

public class User
{
    public User()

    {

    }

    private string id;

    private string userName;

    private string password;

    private string emailAddress;

private DateTime lastLogon;

    public string Id

    {
        get { return id; }

        set { id = value; }
    }

    public string UserName

    {
        get { return userName; }

        set { userName = value; }
    }

    public string Password

    {
        get { return password; }

        set { password = value; }
    }

    public string EmailAddress

    {
        get { return emailAddress; }

        set { emailAddress = value; }
    }

    public DateTime LastLogon

    {
        get { return lastLogon; }

        set { lastLogon = value; }
    }
}
它對應(yīng)的.hbm.xml文件如下:
<?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>

官方主頁:http://www./

學(xué)習(xí)資源

園子里首推DDL的Blog:http://www.cnblogs.com/renrenqq/,有NHibernate文檔的中文翻譯以及DLL寫的一些非常優(yōu)秀的NHibernate文章。

大名鼎鼎的張老三:http://blog.csdn.net/billy_zh/category/22383.aspx

Aero的Nhibernate學(xué)習(xí)手記系列:http://www.cnblogs.com/chwkai/category/32514.html

無心之柳的Blog也非常值得推薦:http://www.cnblogs.com/9527/

博客園O/R Mapping團(tuán)隊(duì):http://www.cnblogs.com/team/ORMapping.html

 

二.NBear

園子里Teddy開發(fā)的NBear大家都非常熟悉,現(xiàn)在已經(jīng)發(fā)布了3.0正式版。NBear包含的組件不僅僅是數(shù)據(jù)持久層,還包含了IOC,分布式組件和Web組件??匆幌耇eddy對于NBear的介紹:

NBear的核心包括一個(gè)泛型、強(qiáng)類型的的ORM數(shù)據(jù)持久化接口、一組相關(guān)的Entity相關(guān)組件、高性能分布式組件、Web組件,因此:

1、NBear最適合開發(fā)各類基于ASP.NET 2.0,對性能要求較高的Web程序。NBear.Web組件提供了許多加速Web開發(fā)的組件,將使您基于標(biāo)準(zhǔn) ASP.NET方式的開發(fā)效率大大提高;同時(shí),簡單易用、性能突出的泛型持久化支持,則將使您能夠?qū)⒏嘧⒁饬械綐I(yè)務(wù)開發(fā),同時(shí)也不會(huì)有傳統(tǒng)ORM持久化框架的性能問題和繁瑣配置需要(NBear幾乎不需手動(dòng)配置,性能則接近DAAB)。

2、基于MQ和.Net Remoting的高性能分布式組件,將使您開發(fā)和維護(hù)分布式程序更加容易。一個(gè)基于NBear.IoC模塊的開發(fā)的應(yīng)用程序甚至無需重新編譯就能部屬為真正的負(fù)載均衡的分布式程序。

3、對于桌面應(yīng)用程序,NBear同樣是一個(gè)幾乎沒有什么學(xué)習(xí)曲線(多少人會(huì)為寫一個(gè)小小的日歷程序而仔細(xì)研究透徹Hibernate的參考手冊?)、實(shí)用高效的數(shù)據(jù)持久化方案。

4、隨著NBearV3帶來的全面的ORM支持、更詳細(xì)的文檔和教程,和全面的代碼生成工具,NBear也已經(jīng)可以被用于企業(yè)級程序開發(fā)。

官方首頁:http://teddyma.cnblogs.com/articles/Ilungasoft_Framework.html

學(xué)習(xí)資源

學(xué)習(xí)資源當(dāng)然首推Teddy的個(gè)人Blog:http://www.cnblogs.com/teddyma/

博客園NB團(tuán)隊(duì):http://nbteam.cnblogs.com/

 

三.Castle ActiveRecord

ActiveRecord是Castle中的一個(gè)子項(xiàng)目,現(xiàn)在的版本是RC1。它同樣是一個(gè)非常優(yōu)秀的持久層框架,在底層封裝了NHibernate,改用Attribute來代替配置文件,這樣就不用再像NHibernate那樣去編寫復(fù)雜的配置文件。如下代碼片斷所示:

[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; }
    }

}

官方主頁:http://www.

學(xué)習(xí)資源

官方文檔:http://www./activerec ... tation/v1rc1/index.html

葉子的家:http://wj.cnblogs.com/

TerryLee的Castle開發(fā)系列:

http://terrylee.cnblogs.com/archiv ... astl_ioc_article.html

Castle項(xiàng)目成員之一ayende的Blog:http://www./Blog/

 

四.iBATIS.NET

iBATIS.NET分為DataMapper和DataAccess兩部分,應(yīng)該說DataMapper是這個(gè)框架的核心,DataMapper使用XML文件來實(shí)現(xiàn)從實(shí)體到SQL statements的映射,學(xué)習(xí)起來非常簡單,是用DataMapper后,我們可以自由的使用SQL語句或者存儲過程;DataAccess允許我們通過一個(gè)簡單的接口來操作數(shù)據(jù),而不必了解底層實(shí)現(xiàn)的細(xì)節(jié)。如下代碼片斷:
[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./mapping" 

xmlns:xsi="‘ target=_blank>http://www./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>
官方主頁:http://ibatis./

 

學(xué)習(xí)資源

官方文檔:

http://opensource./confluen ... IBATIS/Quick+Start+Guide

善友的iBATIS.NET開發(fā)指南系列:

http://www.cnblogs.com/shanyou/archive/2006/04/29/388610.html


五.DAAB

DAAB是微軟Enterprise Library中的一個(gè)應(yīng)用程序塊,能夠幫助我們實(shí)現(xiàn)通用的數(shù)據(jù)訪問,所以也把它列在這里介紹一下。DAAB使應(yīng)用程序中的數(shù)據(jù)訪問在不知道具體的數(shù)據(jù)庫系統(tǒng)的情況下進(jìn)行,相信很多朋友對DAAB都很熟性并且已經(jīng)在項(xiàng)目中使用,就不多介紹了,看一個(gè)簡單的代碼片斷:
public string GetCustomerList()

{
// 創(chuàng)建Database對象

Database db = DatabaseFactory.CreateDatabase();

// 使用SQL語句創(chuàng)建DbCommand對象

string sqlCommand = "Select CustomerID, Name, Address, City, Country, PostalCode " +

    "From Customers";

DbCommand dbCommand = db.GetSqlStringCommand(sqlCommand);

StringBuilder readerData = new StringBuilder();

// 調(diào)用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();

}

官方主頁:http://msdn.microsoft.com/practices/

學(xué)習(xí)資源

企業(yè)的幫助文檔和Hands On Lab

TerryLee的Enterprise Library系列:http://www.cnblogs.com/Terrylee/archi ... nterprise_Library.html

 

附加介紹:DLinq

DLinq雖然不能算是開源框架,但是說到數(shù)據(jù)持久,還是提一下比較好,DLinq是微軟下一代數(shù)據(jù)庫集成查詢語言,在這之前微軟曾經(jīng)嘗試過ObjectSpace,最后是不了了之。DLinq實(shí)現(xiàn)的方式有點(diǎn)類似于前面說過的ActiveRecord,不支持使用外部的XML配置文件,而是使用了Attribute的方式,如下代碼片斷所示:
[Table(Name="Customers")]

public class Customer

{

    [Column(Id=true)]

    public string CustomerID;

    [Column]

    public string City;

}

官方主頁:http://msdn.microsoft.com/netframework/future/linq/

學(xué)習(xí)資源

下載LINQ May CTP版:http://msdn.microsoft.com/data/ref/linq/

ScottGu的Blog:http://weblogs./scottgu/default.aspx

 

最后值得一提的是,微軟又推出個(gè)Ado.net vNext,使用映射文件來配置,更加類似于NHibernate。關(guān)于持久層框架,還有很多,這里就不再介紹了,如Grove等。

原文地址: http://www.cnblogs.com/Terrylee/archive/2006/12/02/ope ... resource_recommendation_orm.html

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多