# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > دسترسی به داده ها (ADO.Net و LINQ و ...) >  پروژه آماده NHibernate

## مهدی عابدینی

می خواستم از ابتدا کامل در مورد Nhibernate توضیح بدم اما گفتم یه پروژه آماده بذارم روش کار کنید اگه مشکل داشتید بگید با همکاری بچه ها حل کنیم.

----------


## yasemi

خوب عزیز شما شروع کن به توضیح دان

----------


## مهدی عابدینی

PDF فصل اول را دانلود کنید
تایید و تشکرهای شما باعث اشتیاق بیشتر در ارائه این مطلب می شود

----------


## ricky22

سلام دوست عزیز می تونید یک مقایسه از این ORM با LINQ و یا CODESMITH بدید؟
از نظر راحتی و سرعت و بهینه بودن

----------


## majid325

از نظر راحتی که شروع و نگهداری Linq نسبت به NHibernate بهتره
از نظر سرعت یه ابهاماتی در این سوال هست :
   1-سرعت خواندن از منبع
   2-سرعت خواندن از Cache
   3-سرعت خواند در N بار
  و همچنین برای Insert , Update و کمی هم Delete

فکر کنم منطقی تر این باشه که Entity FramWork 4 رو با NHibernate 2..1.2 مقایسه کنیم

پ ن :
فعلا Linq یک ORM هست یا نه رو راجع به هش صحبت نمیکنیم

----------


## مهدی عابدینی

قبل شروع ادامه بحث شیرین ان هایبرنت دو تا تشکر دارم
  اول از آقای رستمی و خانم محمد نژاد و آقای نصیری برای اینکه تو جمع آوری مطالب کمکم کردن
  دوم از تمام کسانی که در این تاپیک شرکت می کنن و نظر میدن و در کامل شدن مطالب کمک می کنن

----------


## مهدی عابدینی

در جواب ricky22 :
بايد دقت داشته باشيد كه LINQ به تنهايي فقط يك language feature است و نه يك data access technology . بنابراين بايد دقيقا linq to sql يا linq to entities را مشخص كرد.
سابقه نزديك به يك دهه پروژه اصلي Hibernate‌ كه توسط جاوا كارها توسعه داده شده، در اين فريم ورك لحاظ شده كه از هر لحاظ نسبت به LINQ to entities اون رو پخته‌تر كرده. ضمنا پروايدر LINQ هم براي NH اخيرا توسعه داده شده و از اين لحاظ كم و كسري ندارد.
linq to sql براي اس كيوال سرور توسعه داده شد. بعد مايكروسافت اومد اون رو با linq to entities تكميل كرد (البته linq to sql مطابق وبلاگ رسمي برنامه نويس‌هاي MS هنوز هم توسعه پيدا مي‌كنه و در دات 4 شاهد اون خواهيم بود) و توسط linq to entities امكان استفاده از ساير ديتابيس‌ها هم فراهم شده البته اگر پروايدر آن موجود باشد كه تعدادي از آن‌ها هم تجاري هستند. اما با NH اين مشكل رو نداريد چون تقريبا همه نوع ديتابيس معروفي را ساپورت مي‌كند و رايگان هم هست.
learning curve مربوط به NH بيشتر است از ساير orm ها.
NH از دات نت فريم 2 به بعد را پشتيباني مي‌كند اما linq to entities فقط از دات نت فريم ورك سه و نيم سرويس پك يك به بعد به صورت كامل در دسترس است.

----------


## مهدی عابدینی

ان هایبر نت به دو شکل سنتی و Fluent NHibernate می باشد
در NHibernate سنتي كار ساخت نگاشت‌ها توسط يك سري فايل xml صورت مي‌گيرد كه ممكن است حين تهيه اوليه  اشتباهات تايپي و غيره داشته باشد.اين نوع فايل‌ها تحت كنترل كامپايلر نبوده و در حين كار مشكلات آن‌ها مشخص مي‌شود.
در Fluent NHibernate كار تعريف نگاشت‌ها با استفاده از كدهاي strongly typed دات نتي صورت مي‌گيرد كه بلافاصله تحت كنترل كامپايلر هستند. همچنين مبحث Auto Mapping آن را مي‌توانيد در قسمت‌هاي بعد مطالعه كنيد. امكان unit test نوشتن براي نگاشت‌هاي اين روش بدون حتي درج يك ركورد در ديتابيس ميسر است . با توجه به اينكه در روش دوم تعريف نگاشت‌ها، بلافاصله تحت نظر كامپايلر است امكان refactoring ساده‌تر آن نيز مهيا است.


در اینجا  ابتدا به شکل سنتی NHibernate می پردازیم سپس Fluent NHibernate را کامل توضیح می دهیم.

----------


## مهدی عابدینی

برای استفاده از NHibernate مراحل مختلفی را باید سپری کرد که در زیر به آنها اشاره می‌شود. 

مرحله اول : ایجاد پایگاه داده

پایگاه داده هایی که ان هایبرنت پشتیبانی می کند به شرح زیر می باشد :

Microsoft SQL Server 2005/2000 
Oracle 
Microsoft Access 
Firebird 
PostgreSQL 
DB2 UDB 
MySQL 
SQLite 

گام دوم . دانلود و نصب ان.هایبرنیت .

گام سوم . اضافه کردن DLL های ان.هایبرنیت به پروژه.
پروژه‌ای ایجاد کنید و فایل های DLL Requirement.rar و DLL Requirement.rar11  را که در ضمیمه آورده شده را به پروژه اضافه کنید.

گام چهارم . تنظیمات مورد نیاز در Web.Config .
در ادامه تنظیمات زیر در فایل web.config برنامه اضافه می‌کنیم.


توضیحات موارد بالا در قسمت بعدی به شکل زبان اصلی آورده شده است

----------


## مهدی عابدینی

در فایل ضمیمه زیر web.config پایگاه داده هایی که ان هایبرنت پشتیبانی می کند را کامل با کد به زبان اصلی آورده ایم.

----------


## مهدی عابدینی

اگه دوست دارین بگین تا من ادامه بدم

----------


## naser2009

> اگه دوست دارین بگین تا من ادامه بدم


سلام آقای عابدینی لطف کنید ادامه بدید مبحث جالبیست. :لبخند: 
وسط مسط کدا و مثلا تنظیمات web.config خودتون هم توضیح بدهید.

----------


## taghvajou

مهندس عابدینی! دستتون درد نکنه! مطلب مفیدیه! لطفا همین طوری گام به گام ادامه بدین! خدا خیرتون بده

----------


## مهدی عابدینی

مواردی که به زبان اصلی در تاپیک قبل  آورده شده بود توضیحاتی اضافی برای همه برنامه نویسانی بود که با پایگاه داده های متفاوت کار می کنند اما ما در اینجا فقط با پایگاه داده SQL کار می کنیم و به صورت کامل نیز تمام قسمت های آن را توضیح می دهیم.

----------


## مهدی عابدینی

در مورد اين كلاس:
با توجه به اينكه برنامه از نوع ويندوزي است، براي مديريت صحيح كانكشن استرينگ، فايل App.Config را به برنامه افروده و محتويات آن‌را به شكل زير تنظيم مي‌كنيم 


<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="nhibernate" type="System.Configuration.NameValueSectionHandler  " />
    <!--<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHa  ndler"/>-->
  </configSections>

  <nhibernate>
    <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
    <add key="hibernate.show_sql" value="true" />
    <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvi  der" />
    نوع پایگاه داده
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2005Dialect" />

    <add key="hibernate.connection.connection_string" value="Data Source=.\SQLEXPRESS;AttachDbFilename=آدرس پایگاه داده;Integrated Security=True;Connect Timeout=30;User Instance=True" />
  </nhibernate>


</configuration>

----------


## مهدی عابدینی

فصل دوم را دریافت کنید

----------


## naser2009

سلام آقای عابدینی لطف کنید حجم پست ها رو یه خورده کمتر کنید تا بهتر متوجه بشیم :بوس: 
ممنون از زحمت های شما

----------


## naser2009

آقای عابدینی
4 تا مساله 
1) اگه n-hibernate رو نصب کنیم واسه من یه project template اضافه می کنه (یعنی وقتی new project می زنم گزینه ای مثله n-hibernate project داریم - یا مثله ajax control toolkit که وقتی نصب باشه گزینه ajax enabled website هم اضافه شده) 

2) از کجا دانلود کنیم n-hibernate رو اگه لینکشو دارین بذارین لطفا

3) متعلق به شرکت خاصی نیست ؟

4)آیا مطمئن اید که sql server 2008 رو support نمیکنه(چون الان ساله 2010هه فکر نکنم زیاد جالب باشه 5 سال عقب باشیم :چشمک: )

----------


## مهدی عابدینی

من فایل های که باید دانلود کنید و به پروژه اضافه کنید را در تاپیک قبل گذاشته ام و نیازی نیست به سایت خاصی برید 
NHibernate نصب کردنی نیست فقط باید فایل های DLL آن را به References اضافه کنید. بعد در مراحل بعد در پروژه از آن استفاده می کنیم.
در مورد NHibernate در تاپیک های ابتدایی توضیح کامل داده شده است
در مورد sql server 2008 کامل نمیدونم که پشتیبانی می کنه یا نه و احتمال می دم پشتیبانی می کنه  اما فکر میکنم اگه بخوای خیلی حرفه ای کار کنی و به روز باشی می تونی از Oracle استفاده کنی

----------


## مهدی عابدینی

چون اطلاعات خیلی زیاده و مربوط بهم و فصلی گفته میشه حجم تایپک ها افزایش پیدا میکنه اگه همه مایل هستید هر فصل را بصورت Pdf براتون بذارم تا از شلوغی و حجم زیاد پست ها جلو گیری بشه ؟؟؟؟؟؟؟؟؟؟؟؟

----------


## Mostafa_Dindar

> چون اطلاعات خیلی زیاده و مربوط بهم و فصلی گفته میشه حجم تایپک ها افزایش پیدا میکنه اگه همه مایل هستید هر فصل را بصورت Pdf براتون بذارم تا از شلوغی و حجم زیاد پست ها جلو گیری بشه ؟؟؟؟؟؟؟؟؟؟؟؟


سلام ,

نیکی و پرسش ؟ این کارتون قابل تقدیره . با این کار , یک منبع خوب فارسی برای کار nHibernate ایجاد میشه , ضمن اینکه حق CopyRight نویسنده اون هم محفوظ میمونه .

----------


## مهدی عابدینی

فصل ها را مرتب در این تاپیک گذاشتم لطفا مشاهده کنید اما سوالات و نظراتتون را اینجا بدین ممنون میشم
http://www.barnamenevis.org/sh...d.php?t=229095

----------


## مهدی عابدینی

تشکر های شما باعث دل گرمی و کامل شدن مطلب می گردد.
از تمام دوستانی که مرا همراهی کردن ممنونم

----------


## saeedmain

از شما بابت مطالب وپروژه ی آماده تون متشکرم. :تشویق: 
 اما 2تا سوال داشتم:
1-   هنگام اجرای پروژه مشکلی نداشتم ،ولی موقع افزودن یک بیمار وکلیک بر دکمه ی ثبت،خطا مید هد وپنجره پیغام  خطایی را که تعریف کردیدکه هنگام رخداد exception  نمایش داده شود را نشان میده با پیغام زیر:
Object reference not set to an instance of an object
 هم چنین موقعی که بر روی دکمه ی  جستجو کلیک میکنم هم بر روی خط زیر  exception  میده و دیگه اجرا هم نمیشه
 return sessionFactory.OpenSession();
 در واقع نمیتونه session  رو باز کنه!
 اگه راهنماییم کنید که چه کنم خیلی ممنون میشم.آیا تنظیم خاصی نیازه؟ :گیج: 
2-   سوال بعدی اینکه شما یه بار گفتید نیاز به نصب چیز خاصی نیست وفقط باید کتابخانه ها رو اضافه کرد ولی توی مقاله صراحتا ذکر کردید که یکی ازمراحل استفاده از این تکنولوژی  نصب nhibernateهست که میتونید از اینترنت دانلودکنیدونصب کنید.خواهش می کنم راهنمایی کنید که آیا باید چیزی نصب کنیم یانه؟
 باز هم خیلی خیلی ممنونم وخواستار ادامه ی آموزشتون هستم...

----------


## مهدی عابدینی

ببخشید من چند روز نبودم
در مورد سوال دومتون :
ان هایبرنت نیازی به نصب نداره و منظورم در مقاله همان اضافه کردن به کتابخانه است.

----------


## مهدی عابدینی

کار با ان هایبرنت یه کوچولو سخته اما بعد از اینکه یاد گرفتی معمار خوبی میشه

اولین چیزی که ممکن است برنامه را با خطا روبرو کند تنظیمات قسمت App.confing یا همون web.config می باشد
به قسمت زیر در این فایل دقت کن ببین همه چیز را درست تنظیم کردی
[code]
 <nhibernate>
    <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
    <add key="hibernate.show_sql" value="true" />
    <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvi  der" />
    <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2005Dialect" />
    <add key="hibernate.connection.connection_string" value="Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Project\Ho  spital\Hospital V1.2\Hospital\Database1.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True" />
  </nhibernate>
[code/]

----------


## saeedmain

آقای عابدینی سلام وتشکر مجدد
 app.configمشکلی نداشت،البته مسیر دیتابیس رو در AttachDbFilenameباتوجه به مسیر دیتا بیس در کامپیوتر خودم تغییر دادم.
اما دقیقا هر دو مشکلی که گفتم هنوز وجود داره.
از راهنماییتون ممنون میشم.

----------


## مهدی عابدینی

در صورتی که شما برنامه که من گذاشتم را عینا اجرا کردید و با خطا روبرو شدید 
این خطا چیزی جز اتصال به پایگاه داده نیست 
ممکن است از SQL 2005 شما باشد 
اگه کامل پایگاه داده و  app.config را چک کردید و باز برنامه درست اجرا نشد ایملتون را بدید مثال های دیگری را براتون بفرستم

----------


## saeedmain

از اینکه به بنده کمک میکنید صمیمانه متشکرم.
ایمیل من
nategh1365@yahoo.com
باز هم از شما متشکرم. :تشویق:

----------


## مهدی عابدینی

ارسال شد 
براتون مرجع زبان اصلی ان هایبرنت را میفرستم.

----------


## saeedmain

آقای عابدینی 
سلام 
از شما بابت مطالب وپروژه ی آماده تون ممنونم. :تشویق: 
برنامه ی جدید شما را  اجرا کردم .صفحه ی اصلی نمایش داده می شود.ولی دوباره وقتی بر دکمه ی جستجو کلیک می کنم در خط زیر خطای  NonReferenceExceptionصادر می کند ودیگر اجرا نمی شود. 
 ICriteria cri = session.CreateCriteria(typeof(Patient));
البته مسیر دیتابیس  رو در  AttachDbFilenameدر app.config طبق  مسیر دیتا بیس در کامپیوتر خودم تغییر دادم.باز درست نشد. :خیلی عصبانی: 
آیا قبل از اجرای برنامه باید تغییراتی اعمال کنم،آیا باید چیزی را اضافه کنم،یا شما reference ها رابطور پیش فرض اضافه کرده اید.
محیط  من  sql server 2005 ,visual studio 2008 است ،آیا مشکل از اینهاست. 
اگه زحمتی نیست راهنماییم کنید. :خجالت: 
تشکر

----------


## hoda.nik

با سلام و تشکر .من دستورات delete , insert , update در ان هایبر نت در صفحات وب را نیاز دارم .ممنون.

----------


## RezaMazhari

با سلام
مطالب مربوط به فصل 1و2و3 nhibernate را نتوانستم دانلود كنم .
فايل هاي rar به صورت attachment.php ذخيره و توسط IE باز نميشوند .
ممنون ميشم اگه راهنمايي كنين .

----------


## HAMRAHSOFT.IR

[QUOTE=مهدی عابدینی;980478]می خواستم از ابتدا کامل در مورد Nhibernate توضیح بدم اما گفتم یه پروژه آماده بذارم روش کار کنید اگه مشکل داشتید بگید با همکاری بچه ها حل کنیم.[/QUOTE

سلام 
دوست خوب امكان داره يك نمونه با بانك اكسس قرار بديد؟

----------


## iranian_genius

لطفا دوستانی که در مورد Nhibernate اطلاعات مفید و مقاله و پروژه دارند برای استفاده دیگران قرار بدهند

واقعا حیفه ایین آموزشها ول بشه....

----------


## mehdi_payervand

سلام، من نمونه آموزشهای زیادی رو دیدم و کتاب NHibernate 3 Beginners Guide  انتشارات Packt که نسخه 3 انهایبرنت رو آموزش داده رو هم خوندم ولی دست آخر دیدم غیر از مطالب فصل آخر که نویسنده کتاب در مورد خطاهای متداول گفته برای آموزش مطمئنا نوشته های آموزشی رو از وبلاگ مهندس نصیری بصورت پی دی اف که تهیه کردم میتونه کمک خوبی به همه بکنه امیدوارم مفید فایده باشه:
مقالات آموزشی NHibernate وبلاگ مهندس وحید نصیری

----------


## HAMRAHSOFT.IR

دوستان کسی هست که کار کرده باشه ویا منبع خوب فارسی سراغ داشته باشه؟

----------

