ASP.NET، مقالات

استفاده از jQuery UI Dialog در ASP.NET

یکی از نیازهای مهم برنامه نویسان وب، مخصوصاً هنگام توسعه وب اپلیکیشن ها، استفاده از دیالوگ ها برای کاربردهای مختلف است. در حالی که در برنامه های ویندوزی استفاده از پنجره های دیالوگ امری رایج و ساده است، در محیط وب اینگونه نیست. در واقع در وب چیزی که به عنوان دیالوگ در ویندوز می شناسیم وجود ندارد، و باید با همین صفحات معمولی و مقداری کد جاوا اسکریپت یک پنجره دیالوگ را ایجاد کنیم. این مسئله در برخی مواقع واقعاً مشکل ساز می شود و دست برنامه نویس را می بندد.

خوشبختانه کتابخانه jQuery UI دارای یک کامپوننت Dialog مناسب برای استفاده در محیط وب است که با تمامی مرورگرهای مدرن سازگاری کامل دارد و به علت اینکه بر روی کتابخانه jQuery کار می کند در تمام پلت فرم های توسعه وب قابل استفاده است.

برای استفاده از این Dialog در یک صفحه ASP.NET باید کتابخانه های jQuery و jQuery UI را دانلود کنید و در صفحه مورد نظر خود به آن ها ارجاع اسکریپتی بدهید. در این مطلب یک مثال ساده در مورد استفاده از jQuery UI Dialog  را توضیح خواهیم داد. پروژه مثال این مطلب را از اینجا دریافت کنید. قصد ندارم تمام کدهای نوشته شده در این پروژه مثال را توضیح بدهم، فقط نکات مهم مربوط به موضوع بحث را خواهید خواند. خواندن سورس کد و مشاهده مثال بهتر از توضیحات متنی به شما کمک می کند.

پس از دانلود و اجرای پروژه، با یک صفحه ساده مواجه خواهید شد که یک دکمه با عنوان Set Values در آن وجود دارد. با کلیک کردن بر روی این دکمه یک دیالوگ jQuery شبیه به تصویر زیر خواهید داشت :

jQuery UI Dialog Exampleدکمه Cancel دیالوگ را می بندد و دکمه OK برچسب های روی صفحه را با مقادیر تکست باکس ها هماهنگ می کند. jQuery UI Dialog در حالت معمول بعد از تگ form در ASP.NET رندر می شود که این باعث می شود تا دکمه های موجود در دیالوگ هیچ Post Backی به صفحه نداشته باشند که البته این مشکل به راحتی حل می شود. برای اینکه دکمه های موجود در دیالوگ بدون رفرش شدن صفحه کار خود را انجام بدهند، محتویات دیالوگ را درون یک UpdatePanel قرار می دهیم. مهمترین کدهایی که در مورد آن ها بحث می کنیم، کدهای جاوا اسکریپت زیر هستند :

<script type="text/javascript">
 $(document).ready(function () {
 $('#divValues').dialog({
 autoOpen: false,
 draggable: true,
 maxHeight: 440,
 width: 400,
 modal: true,
 title: "Enter values",
 open: function (type, data) {
 $(this).parent().appendTo("form");
 }
 });
 });

 function openDialog(id) {
 $('#' + id).dialog("open");
 }

 function closeDialog(id) {
 $('#' + id).dialog("close");
 }

 </script>

در واقع این کدهای بالا هستند که دیالوگ jQuery را می سازند و آن را باز و بسته می کنند. علامت $ که در ابتدای کد بکار رفته نشان دهنده این است که در حال استفاده از توابع کتابخانه jQuery هستیم. تابع اول دیالوگ را با خصوصیات مشخص شده مقدار دهی می کند. لیست کامل این خصوصیات را می توانید اینجا مشاهده کنید و بر اساس نیاز خود تغییر دهید. بعد از اجرای برنامه، تا زمانی که تابع openDialog صدا زده نشود، دیالوگ ما هم نشان داده نخواهد شد و در واقع jQuery آن را از دید کاربر مخفی نگه خواهد داشت. محتویات یک دیالوگ باید در یک div قرار بگیرند که نام آن باید برای dialog مشخص شود. نکته ای که شما به عنوان یک برنامه نویس ASP.NET در این مورد باید بدانید این است که حتماً UpdatePanel دیالوگ را داخل این div قرار دهید تا کدهایتان به درستی کار کند.

ویژگی خوب کتابخانه jQuery UI سبک بودن و سازگار بودن با اکثر مرورگرهای مدرن امروزی است. برای تغییر ظاهر دیالوگ هم دست شما بسیار باز است و می توانید از تم های آماده jQuery UI استفاده کنید و یا حتی استایل خود را برای آن بسازید.

دریافت پروژه مثال

مقالات، دات نت

ویژگی جدید Code-first برای Entity Framework

با محبوب شدن NHibernate و کتابخانه های وابسته به آن مثل Castle ActiveRecord و Fluent NHibernate، مایکروسافت به تازگی ویژگی جدیدی را به صورت Preview برای ORM خود یعنی Entity Framework عرضه کرده است که قابلیت هایی جدیدی را به توسعه دهندگان می دهد تا به جای سر و کله زدن با ابزارهای Designer و فایل های نگاشت XML، بر کدهای شیء گرا تمرکز داشته باشند. با این ویژگی شما به راحتی می توانید مدل خود را با استفاده از کلاس های معمولی بسازید و از EF بخواهید تا دیتابیس را از روی مدل نوشته شده توسط شما بسازد.

نسخه ای که به تازگی عرضه شده آخرین نسخه کتابخانه Code first قبل از ارائه نسخه اصلی خواهد بود. برای دانلود این ویژگی جدید به این صفحه از سایت مایکروسافت بروید. بعد از نصب کتابخانه، برای استفاده از این ویژگی پروژه جدیدی از نوع Class Library ایجاد کنید و به فایل EntityFramework.dll در مسیر نصب شده ارجاع دهید. یک کلاس به نام Blog با محتویات زیر بسازید :

using System.Collections.Generic;<br />
using System.ComponentModel.DataAnnotations;<br />
using System.Data.Entity;</p>
<p>namespace BlogModel<br />
{<br />
public class Blog<br />
{<br />
[Key]<br />
public long ID { get; set; }</p>
<p>[Required(ErrorMessage="Title is required.")]<br />
public string Title { get; set; }</p>
<p>public bool ShowInSearchEngines { get; set; }</p>
<p>public string Description { get; set; }</p>
<p>public IList<Post> Posts { get; set; }<br />
}<br />
}

می خواهیم مدلی بسازیم برای نگهداری اطلاعات یکسری وبلاگ به علاوه پست ها و کامنت های هر کدام. در اینجا شما می توانید کلاس هایی ایجاد کنید که هر کدام نشان دهنده یک موجودیت در دیتابیس شما خواهند بود. این کلاس ها می توانند کلاس های ساده POCO باشند که نیازی ندارند از کلاس دیگری به ارث بروند تا نقش یک Entity را برای شما بازی کنند. این ویژگی به شما کمک می کند تا یک مدل ساده، قابل درک، تمیز و قابل تست برای پروژه خود بسازید. کلاس های مثال ما همگی POCO هستند.

using System.Collections.Generic;<br />
using System.Data.Entity;<br />
using System.ComponentModel.DataAnnotations;</p>
<p>namespace BlogModel<br />
{<br />
public class Post<br />
{<br />
[Key]<br />
public long ID { get; set; }</p>
<p>[Required(ErrorMessage="Title is required.")]<br />
public string Title { get; set; }</p>
<p>[StringLength(4000)]<br />
[Required(ErrorMessage="Content is required.")]<br />
public string Content { get; set; }</p>
<p>public Blog Blog { get; set; }</p>
<p>public IList<Comment> Comments { get; set; }<br />
}<br />
}

کلاس Post برای نگهداری اطلاعات یک پست وبلاگ نوشته شده است. Post با موجودیت Blog یک رابطه چند به یک و با موجودیت Comment یک رابطه یک به چند دارد که با استفاده از پراپرتی در آن مشخص شده اند. با استفاده از قابلیت های فضای نام DataAnnotations می توان مشخصات یک موجودیت را اعتبار سنجی نمود. این اعتبار سنجی با استفاده از تعریف Attribute بر روی مشخصات انجام می شود. به طور مثال پراپرتی Content در این موجودیت می تواند تا 4000 کاراکتر را در خود ذخیره کند و حتماً باید مقداری برای آن وارد شود وگرنه یک استثنا رخ خواهد داد که باید توسط برنامه نویس هندل شود.

using System.Data.Entity;<br />
using System.ComponentModel.DataAnnotations;</p>
<p>namespace BlogModel<br />
{<br />
public class Comment<br />
{<br />
[Key]<br />
public long ID { get; set; }</p>
<p>[Required(ErrorMessage="Name is required.")]<br />
public string Name { get; set; }</p>
<p>[Required(ErrorMessage="Email is required.")]<br />
public string Email { get; set; }</p>
<p>public string URL { get; set; }</p>
<p>[Required]<br />
public string Content { get; set; }</p>
<p>public Post Post { get; set; }<br />
}<br />
}<br />

استفاده از مشخصه های اعتبارسنجی باعث می شود که مدل ما به صورت خودکار در هنگام ذخیره در دیتابیس، اطلاعات خودش را مورد بررسی قرار دهد تا در صورت وجود یک داده نا معتبر از ذخیره شدن اطلاعات درون دیتابیس جلوگیری کند. برای اتمام مدل خودمان در این مثال فقط یک قدم دیگر مانده و آن هم ایجاد یک کلاس DbContext برای کلاس های ساده مان است :

using System.Data.Entity;</p>
<p>namespace BlogModel<br />
{<br />
public class MyBlogPlatform: DbContext<br />
{<br />
public DbSet<Blog> Blogs { get; set; }<br />
public DbSet<Post> Posts { get; set; }<br />
public DbSet<Comment> Comments { get; set; }<br />
}<br />
}<br />

در واقع این کلاس باعث می شود تا کلاس های ساده ی ما با دیتابیس بوسیله Map کردن کلاس ها به جدوال و پراپرتی ها به فیلدها و رابطه ها  ارتباط برقرار کنند. کدهای بالا تمام کدهای لازمی بود که ما برای ایجاد مدل و لایه دسترسی به داده های خود احتیاج داشتیم. آخرین مرحله قبل از استفاده از این مدل، مشخص کردن Connection String برای ایجاد دیتابیس از روی آن است که می توانید در web.config آن را به صورت زیر مشخص کنید :

<connectionStrings><br />
 <add name="MyBlogPlatform"  connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=MyBlogPlatform;Integrated Security=True"  providerName="System.Data.SqlClient"  />

EF Code first به صورت پیش فرض به دنبال رشته اتصالی در فایل web.config می گردد که با کلاس Context شما همنام باشد. چون کلاس Context ما در این مثال MyBlogPlatform است، EF هم به دنبال رشته اتصالی به همین نام خواهد گشت و از آن برای ایجاد دیتابیس یا اتصال به دیتابیس موجود استفاده خواهد کرد. برای اینکه مطمئن شویم کارمان مشکلی ندارد کدی برای ایجاد یک موجودیت بلاگ در دیتبایس در مکان مناسب (مثل کلیک یک دکمه در صفحه) می نویسیم :

MyBlogPlatform blogPlatform = new MyBlogPlatform();<br />
 Blog blog = new Blog()<br />
 {<br />
 Title = "Farasun",<br />
 ShowInSearchEngines = true,<br />
 Description = "A blog about programming"<br />
 };<br />
 blogPlatform.Blogs.Add(blog);<br />
 blogPlatform.SaveChanges();<br />
 

در این نقطه کار ما به پایان رسیده و شما قادر خواهید بود که با مدل خود کار کنید. EF تمام کارهای مربوط به دیتابیس را انجام خواهد داد و شما فقط باید بر روی قوانین تجاری و رابط کاربری اپلیکیشن خود وقت بگذارید. به طور مثال برای کوئری گرفتن توسط LINQ می توانیم چنین کدی برای مدل خود بنویسیم :

MyBlogPlatform myBlogPlatform = new MyBlogPlatform();<br />
 var query = from x in myBlogPlatform.Posts<br />
 where x.Title.Contains(“Entity Framework”)<br />
 select x;<br />
 

اگر سری آموزش های Castle ActiveRecord در این وبلاگ را دنبال کرده باشید، با این پست غریبه نبوده اید. اینطور که به نظر می رسد تیم Entity Framework راه درستی برای ادامه توسعه این پروژه انتخاب کرده و در آینده ای نزدیک باید شاهد قابلیت های بیشتری در جهت بهبود کارایی این ORM باشیم.

NHibernate

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

قسمت اول | قسمت دوم | قسمت سوم

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

از آنجا که در حال حاضر انجام آزمایش های واحد یا Unit Testing نقش مهمی را در توسعه یک نرم افزار ایفا می کند، در این قسمت می خواهیم نحوه نوشتن آزمایش واحد برای لایه دسترسی به داده هایی که با Castle ActiveRecord توسعه داده شده است را مورد بررسی قرار دهیم. برای این کار از فریم ورک اوپن سورس NUnit استفاده خواهیم کرد. قبل از هر کاری کتابخانه NUnit را از اینجا دریافت کنید. خواهید دید که انجام تست های واحد بر روی کلاس های Castle ActiveRecord به راحتی امکان پذیر است.

برای اینکه مطمئن شویم مدل برنامه مثال ما درست کار می کند، از تست واحد استفاده می کنیم. شاید بهتر بود قبل از نوشتن پست های قبلی، ابتدا تست واحد را می نوشتم اما به نظرم اینطوری توضیح دادن کدها مشکل تر بود. دست بکار شوید و یک پروژه جدید به نام MyBookStore.Test به Solution خود اضافه کنید و به فایل های Castle.ActiveRecord ، NHibernate.dll ، NUnit.Framework.dll و MyBookStore.Model.dll ارجاع دهید.

اگر خاطرتان باشد اولین کاری که پس از مشخص شدن مدل برنامه کردیم، راه اندازی اولیه CAR در هنگام اجرای برنامه بود. کلاس ActiveRecordStarter برای این مورد کاربرد دارد. در برنامه اصلی تنظیمات ActiveRecord را از فایل App.config خواندیم اما در اینجا می خواهیم از یک فایل جداگانه تنظمیات را بخوانیم چون قرار است تست واحد با استفاده از NUnit Test Runner اجرا شود. یک کلاس جدید به نام TestCase به این پروژه اضافه کنید و کدهای زیر را در آن بنویسید :

using System;
using System.Collections.Generic;
using NUnit.Framework;
using Castle.ActiveRecord;
using Castle.ActiveRecord.Framework;
using Castle.ActiveRecord.Framework.Config;
using MyBookStore.Model;

namespace MyBookStore.Test
{
[TestFixture]
 public class TestCase
 {

 [TestFixtureSetUp]
 public virtual void FixtureSetup()
 {
 IConfigurationSource configSource =
 new XmlConfigurationSource("ActiveRecordConfig.xml");
 ActiveRecordStarter.Initialize(typeof(Book).Assembly,configSource);
 }

 [SetUp]
 public virtual void OneTimeSetup()
 {
 ActiveRecordStarter.DropSchema();
 ActiveRecordStarter.CreateSchema();
 }

 [Test]
 public void InsertMyBook()
 {
 using (new SessionScope())
 {
 Book book = new Book()
 {
 Title = "Learn Castle ActiveRecord",
 BuyPrice = 1000,
 SalePrice = 2000
 };
 Category category = new Category() { Title = "ORM" };
 category.Create();
 Author author = new Author() { Title = "Iman Nemati" };
 author.Create();
 Publisher publisher = new Publisher() { Title = "Farasun" };
 publisher.Create();
 book.Categories = new List<Category>();
 book.Categories.Add(category);
 book.Author = author;
 book.Publisher = publisher;
 book.Create();
 Book[] books = Book.FindAll();
 Assert.AreEqual(1, books.Length);
 Assert.AreEqual("Iman Nemati", books[0].Author.Title);
 }
 }
 }
}
}

پروژه را کامپایل کنید تا اسمبلی MyBookStore.Test ساخته شود. حالا یک فایل XML به نام ActiveRecordConfig.xml با محتویات زیر به پروژه خود اضافه کنید :

<?xml version="1.0" encoding="utf-8" ?>
<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=MyBookStoreTest;Integrated Security=True;Pooling=False"/>
<add key="proxyfactory.factory_class" value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle"/>
</config>
</activerecord>

بر روی این فایل کلیک راست کنید و گزینه Properties را کلیک کنید و خاصیت  Copy to Output Directory را برابر Copy always قرار دهید. برای انجام تست واحد نیاز به یک دیتابیس جدا از دیتابیس اصلی داریم. برای این کار در Server Explorer دیتابیس جدیدی به نام MyBookStoreTest بسازید و اگر نیاز است تغییراتی در فایل Config بالا اعمال کنید تا مشکلی پیش نیاید. بعد از اتمام این کار، NUnit Test Runner را اجرا کنید. این فایل معمولاً در مسیر کتابخانه ای که دانلود کرده اید قرار دارد. پس از اجرای این برنامه، از منوی File گزینه Open Project را برگزینید و فایل اسمبلی MyBookStore.Test.dll در مسیر bin\Debug پروژه خود را انتخاب کنید. پس از این کار باید متدهای تست برنامه خود را مشاهده کنید. در اینجا ما فقط یک تست واحد نوشتیم که یک موجودیت Book را با خاصیت ها و روابط مشخص شده در دیتابیس ایجاد می کند و سپس چک می کند که آیا این موجودیت با موفقیت به دیتابیس اضافه شده است یا نه و بعد از آن نام نویسنده را با رشته مورد انتظار ما مقایسه می کند تا از صحت اطلاعات درج شده اطمینان پیدا کنیم. اگر تمام کارها را به درستی انجام داده باشید با کلیک روی دکمه Run، تست واحد شما با موفقیت Pass خواهد شد.

این تست چطور کار می کند؟

اگر با انجام تست واحد آشنایی دارید می توانید این بخش را نخوانید. کلاس TestCase با خاصیت TestFixture همراه شده که این مشخص می کند این کلاس دارای متدهایی برای تست است. متد FixtureSetup همانطور که از نامش مشخص است و با توجه به خاصیت TestFixtureSetup که برای آن تعریف شده، وظیفه مقداردهی های اولیه برای متدهای تست کلاس را بر عهده دارد و فقط یکبار در طول تست اجرا می شود. متد OneTimeSetup نیز که با خاصیت SetUp مشخص شده فقط یکبار برای تمام تست ها اجرا خواهد شد. متد InsertMyBook که با خاصیت Test مشخص شده، متدی است که Fail یا Pass شدن آن برای ما مهم است. در این متد با استفاده از Assert می توان شرط های مختلفی را آزمایش کرد تا از صحت کارکرد متد مطمئن شد. شما می توانید غیر از این متد، متدهای دیگری نیز با مشخصه Test به این کلاس اضافه کنید و تست های واحد خود را برای متدهای مختلف بنویسید.

farasun.wordpress.com

این مطلب ادامه دارد…

برای اینکه مطالب بعدی را از دست ندهید، مشترک فید فراسان شوید!

NHibernate

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

قسمت اول | قسمت دوم

در ادامه می خواهیم اعمال CRUD را برای هر یک از کلاس های برنامه پیاده سازی کنیم. اگر از هر یک از کلاس های دامین برنامه یک نمونه بسازید متوجه خواهید شد که به علت مشتق شدن تمامی این کلاس ها از کلاس ActiveRecordBase تمامی اعمال مورد نظر ما توسط CAR پیاده سازی شده اند! یعنی شما نیازی نیست برای انجام اعمال CRUD متدهایی جدیدی به کلاس های دامین برنامه اضافه کنید. در واقع Castle ActiveRecord یک لایه دسترسی به داده های کامل برای شما مهیا می کند. کافیست شما قوانین تجاری برنامه خود را با override کردن متدهای کلاس ActiveRecordBase اعمال کنید.

برای درک بهتر فرض کنید می خواهیم یک کتاب جدید ایجاد و به دیتابیس اضافه کنیم. کد زیر را برای این کار می نویسیم :

using (new SessionScope())
 {
 Book book = new Book()
 {
 BuyPrice = 1000,
 SalePrice = 1200,
 Title = "Castle ActiveRecord"
 };
 book.Categories = new List<Category>();
 Category category = new Category() { Title = "ORM" };
 category.Save();
 book.Categories.Add(category);
 Author author = new Author() { Title = "Iman Nemati" };
 author.Save();
 book.Author = author;
 Publisher publisher = new Publisher() { Title = "Farasun" };
 publisher.Save();
 book.Publisher = publisher;
 book.Save();
 }

خوشبختانه این کد آنقدر واضح است که نیازی به توضیح اضافه ندارد. یکی از مزایای مهم استفاده از یک ORM همین واضح بودن کدهاست. متد Save ابتدا شیء را برای داشتن یک ID معتبر بررسی می کند و سپس بر اساس آن عمل Insert یا Update را انجام خواهد داد. در اینجا از SessionScope برای Insert کردن آبجکت های مختلف استفاده کردیم. با این کار Castle ActiveRecord یک ISession را برای ذخیره کردن تمام آبجکت های ما در دبتابیس بکار می گیرد. برای ذخیره کردن یک آبجکت به تنهایی نیاز به استفاده از SessionScope ندارید.

حالا فرض کنید می خواهیم شیء کتابی که در بالا به دیتابیس اضافه کردیم را به روز رسانی کنیم. مثلاً عنوان کتاب را عوض کنیم. برای این کار ابتدا باید اطلاعات کتاب مورد نظرمان را در یک آبجکت Load کنیم، اطلاعات آن را تغییر دهیم و برای ذخیره به دیتابیس بفرستیم. کلاس ActiveRecordBase متدهایی مناسبی را برای خواندن و به روز رسانی اطلاعات در اختیارمان قرار می دهد. با متد Find می توانیم اطلاعات یک آبجکت را بوسیله ID یکتای آن از دیتابیس بخوانیم و پس از اعمال تغییرات با استفاده از متد Save تغییرات را به دیتابیس بفرستیم.

Book book = Book.Find(SelectedBookId);
 book.Title = "Learn Castle ActiveRecord with Example";
 book.Save();

همانطور که می بینید انجام اعمال CRUD با استفاده از CAR به سادگی انجام پذیر هستند. به همین ترتیب برای Delete و Update نیز متدهای مناسب وجود دارد. فقط باید توجه داشته باشید که برای انجام Delete و Update آبجکت شما باید دارای یک ID معتبر باشد، اما برای Insert احتیاجی به ID معتبر نیست.

بازیابی رکوردها (Retrive)

همانطور که در اولین قسمت این سری آموزشی گفته شد، در الگوی ActiveRecord متدهای استاتیک بر روی کل رکوردهای دیتابیس و متدهای داینامیک (آن هایی که حتماً باید اول نمونه سازی شوند و سپس مورد استفاده قرار گیرند) بر روی یک رکورد خاص عمل می کنند. کلاس ActiveRecordBase شامل یکسری متد استاتیک است که بیشتر به منظور یافتن رکوردها بر اساس یک شرط پیاده سازی شده اند. برای دستیابی به رکوردها در دیتابیس می توانید از متدهای استاتیک زیر کمک بگیرید :

  • Find : آبجکتی شامل اطلاعات رکوردی از دیتابیس با ID مشخص شده را برمی گرداند.
  • FindAll : آرایه ای از آبجکت ها شامل اطلاعات تمام رکوردهای موجود در دیتابیس برای این کلاس را بر می گرداند.
  • FindAllByProperty : آرایه ای از آبجکت ها شامل اطلاعات تمام رکوردهایی که با شرط Property = Value برابر باشند را برمی گرداند.
  • TryFind : مانند Find است با این تفاوت که اگر رکوردی که با ID پاس داده شده وجود نداشته باشد هیچ خطایی رخ نخواهد داد.

بحثی در مورد بقیه متدهای این کلاس نخواهیم کرد چون می خواهیم برای دستیابی به رکوردها از کوئری های LINQ استفاده کنیم. برای این کار در پروژه Model برنامه مثال به فایل Castle.ActiveRecord.Linq ارجاع دهید. با استفاده از این کتابخانه می توانید از قابلیت های معمولی Linq برای اجرای کوئری روی کلاس های مدل خود برخوردار شوید. متدهای زیر را به کلاس Book خود اضافه کنید : (یادتان نرود اول فضای نام Castle.ActiveRecord.Linq را using کنید)

public static Book GetByID(long id)
 {
 return (from x in ActiveRecordLinq.AsQueryable<Book>()
 where x.ID == id
 select x).First();
 }

 public static List<Book> GetByAuthor(long authorID)
 {
 return (from x in ActiveRecordLinq.AsQueryable<Book>()
 where x.Author.ID == authorID
 select x).ToList();
 }

 public static List<Book> SearchWithTitle(string title)
 {
 return (from x in ActiveRecordLinq.AsQueryable<Book>()
 where x.Title.Contains(title)
 select x).ToList();
 }

 public static List<Book> GetBooksByPriceBetween
(decimal lowPrice, decimal highPrice)
 {
 return (from x in ActiveRecordLinq.AsQueryable<Book>()
 where x.SalePrice >= lowPrice &&
 x.SalePrice <= highPrice
 select x).ToList();
 }

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

farasun.wordpress.com

این مطلب ادامه دارد…

برای اینکه مطالب بعدی را از دست ندهید، مشترک فید فراسان شوید!