NHibernate

یادگیری Castle ActiveRecord با مثال – قسمت هفتم


قسمت اول | قسمت دوم | قسمت سوم | قسمت چهارم | قسمت پنجم | قسمت ششم

نکته : اگر از گوگل ریدر یا هر فیدخوان دیگری استفاده می کنید و کدها را به درستی مشاهده نمی کنید، لطفاً مطلب اصلی را در وبلاگ بخوانید.

یکی از مزیت های مهم استفاده از NHibernate که بسیاری از شرکت ها و توسعه دهندگان فقط به همین دلیل از آن در پروژه ها استفاده می کنند، پشتیبانی از پایگاه داده های محبوبی مثل Oracle, SQL Server, MySQL, Firebird و SQLite است. در این قسمت یاد خواهیم گرفت که چطور Castle ActiveRecord را برای کار با پایگاه داده های مختلف تنظیم کنیم.

اگر خاطرتان باشد در برنامه ویندوزی مثالی که نوشتیم تنظیمات CAR را در فایل App.config ذخیره کردیم (در برنامه های وب در فایل Web.config). این فایل را باز کنید و برای دیتابیس های مختلف به صورت زیر تغییر دهید :

SQL Server

<activerecord>
 <config>
 <add key="connection.driver_class"
 value="NHibernate.Driver.SqlClientDriver"/>
 <add key="dialect"
 value="NHibernate.Dialect.MsSql2008Dialect"/>
 <add key="connection.provider"
 value="NHibernate.Connection.DriverConnectionProvider"/>
 <add key="connection.connection_string"
 value="Data Source=.\SQLEXPRESS;Initial Catalog=MyBookStore;Integrated Security=True;Pooling=False"/>
 <add key="proxyfactory.factory_class"
 value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle"/>
 </config>
</activerecord>

Oracle

<activerecord>
 <config>
 <add key="connection.driver_class"
 value="NHibernate.Driver.OracleClientDriver" />
 <add key="dialect"
 value="NHibernate.Dialect.Oracle10gDialect" />
 <add key="connection.provider"
 value="NHibernate.Connection.DriverConnectionProvider" />
 <add key="connection.connection_string"
 value="Data Source=./Oracle;User ID=MyBookStore;Password=MyBookStore;Unicode=true" />
 </config>
</activerecord>

MySQL

<activerecord>
 <config>
 <add
 key="connection.driver_class"
 value="NHibernate.Driver.MySqlDataDriver" />
 <add
 key="dialect"
 value="NHibernate.Dialect.MySQLDialect" />
 <add
 key="connection.provider"
 value="NHibernate.Connection.DriverConnectionProvider" />
 <add
 key="connection.connection_string"
 value="Database=MyBookStore;Data Source=localhost;User Id=root;Password=" />
 </config>
</activerecord>

Firebird

<activerecord>
 <config>
 <add
 key="connection.driver_class"
 value="NHibernate.Driver.FirebirdDriver" />
 <add
 key="dialect"
 value="NHibernate.Dialect.FirebirdDialect" />
 <add
 key="connection.provider"
 value="NHibernate.Connection.DriverConnectionProvider" />
 <add
 key="connection.connection_string"
 value="Server=localhost;Database=MyBookStore.fdb;User=;password=;ServerType=1;Pooling=false" />
 <add
 key="query.substitutions"
 value="true 1, false 0" />
 </config>
</activerecord>

PostgreSQL

<activerecord>
 <config>
 <add
 key="connection.driver_class"
 value="NHibernate.Driver.NpgsqlDriver" />
 <add
 key="dialect"
 value="NHibernate.Dialect.PostgreSQLDialect" />
 <add
 key="connection.provider"
 value="NHibernate.Connection.DriverConnectionProvider" />
 <add
 key="connection.connection_string"
 value="Server=localhost;initial catalog=MyBookStore;User ID=;Password=;" />
 </config>
</activerecord>

SQLite

<activerecord>
 <config>
 <add key="connection.driver_class"
 value="NHibernate.Driver.SQLite20Driver"/>
 <add key="dialect"
 value="NHibernate.Dialect.SQLiteDialect"/>
 <add key="connection.provider"
 value="MyBookStore.Model.SQLite.SQLiteConnectionProvider, MyBookStore.Model"/>
 <add key="connection.connection_string"
 value="Data Source=Data.db"/>
 <add key="proxyfactory.factory_class"
 value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle"/>
 </config>
 </activerecord>

اگر به کدهای بالا توجه کنید متوجه خواهید شد که Connection Provider مربوط به تنظیمات SQLite با بقیه فرق دارد. این تفاوت به این علت است که NHibernate در نسخه 2 از System.Data.SQLite به صورت توکار پشتیبانی نمی کند. برای اینکه این پشتیبانی را خودمان اضافه کنیم یک کلاس جدید به پروژه Model برنامه مثال اضافه می کنیم که کدهای آن را در زیر مشاهده می کنید :

public class SQLiteConnectionProvider : NHibernate.Connection.DriverConnectionProvider
 {
 private static System.Data.IDbConnection m_Connection;

 public override System.Data.IDbConnection GetConnection()
 {
 if (m_Connection == null)
 m_Connection = base.GetConnection();
 return m_Connection;
 }

 public override void CloseConnection(System.Data.IDbConnection conn)
 {
 //Do nothing
 }
 }

همانطور که مشاهده می کنید انتخاب دیتابیس برای ذخیره داده ها هنگامی که از NHibernate استفاده می کنید کار آسانی است. پروژه مثال این مطالب با SQL Server، Oracle و SQLite با موفقیت آزمایش شده است. مستقل شدن از دیتابیس برای ذخیره داده های یک برنامه، ویژگی بسیار کارآمدی است که با استفاده از Castle ActiveRecord آسان و قابل دسترس است.

این مطلب آخرین قسمت سری آموزشی Castle ActiveRecord به همراه مثال بود اما باز هم در مورد آن در این وبلاگ مطلب خواهیم داشت. اگر خواننده این سری مطالب بودید، لطفاً نظر کلی خودتان را در قسمت نظرات همین پست با من در میان بگذارید.

پ.ن : برای دانلود پروژه مثال این سری مطالب باید چند روز صبر کنید تا کامل شود.

2 نظر برای “یادگیری Castle ActiveRecord با مثال – قسمت هفتم

  1. بسیار عالی و مفید بود، طی یکی دو ساعت کاملا با CAR آشنا شدم.
    من قبلا با کلاس های ساخته شده توسط LinqToSql کار می کردم و می کنم، با این اوصاف احتمالات زیادی وجود داره که به CAR مهاجرت! کنم.

    فقط یک سوال بزرگ: اگر موردی که در این پست ذکر فرمودید، یعنی امکان کار با پایگاه های مختلف رو بذاریم کنار، میشه یه پست در مورد تفاوت ها، مزایا و معایب CAR و EF و مقایسه ی اون ها با هم بزنید؟

    مچکرم.

بیان دیدگاه