اگر تا حالا با پورتال سورس باز دات نت نیوک dotnetnuke کار کرده باشید . حتما متوجه شده اید که ساختار ماژول نویسی آن مبتنی بر سه لایه است .
اما آنچه که من می خواهم در این مطلب بیان کنم ، ماژول نویسی بر پایه orm و بخصوص Entity Framework است . ما می دانیم یکی از مهمترین محاسن این فریم ورک این است که ما را از شر برخی کد نویسیها بخصوص در لایه دیتا و لایه business خلاص می کند ، علاوه بر آن دقت تولید کدهای ما نیز بالاتر می شود .
برای اینکار مراحل زیر را دنبال می کنیم . ابتدا پورتال dotnetnuke را دانلود کنید من در اینجا نسخه 6 این پورتال رانصب کرده ام اکنون پرتال را در کامپایلر vs باز می کنیم .
اکنون روی پوشه App_Code کلیک راست کنید و گزینه فولدر جدید را انتخاب کنید .
فولدر ایجاد شده را EFNotes نام گزاری کنید .
اکنون فولدر DesktopModules را باز کنید و بر روی آن کلیک راست کنید و فولدر جدیدی به همان نام EFNotes در آن بسازید .
فایل Web.config را باز کنید و قسمت compilation را پیدا کنید و در زیر مجموعه codeSubDirectories فولدر جدید ایجاد شده را اعلام کنید مانند تصویر زیر :
اکنون پرتال را اجرا کنید و به قسمت با یوزر و پاسورد میزبان وارد شوید ، سپس در قسمت میزبان host گزینه SQL را برای اجرای اسکریپت ایجاد جدول انتخاب کنید و اسکریپت زیر را اجرا کنید تا جدول مورد نظر ساخته شود .
CREATE TABLE [dbo].[EF_Notes](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Date] [datetime] NULL,
[Message] [nvarchar](500) NULL,
CONSTRAINT [PK_EF_Notes] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
پس از ایجاد جدول بالا دوباره به سورس بر می گردیم .در فولدر EFNotes موجود در بخش APP_Code کلیک راست می کنیم .
و گزینه اضافه کردن آیتم جدید یعنی Add New Item را انتخاب می کنیم . از پنجره باز شده گزینه
ADO.NET Entity Data Model را انتخاب می کنیم . و کلید Add را کلیک می کنیم . اکنون در پنجره باز شده Generate from database را انتخاب کنید . و کلید next را بزنید . در این مرحله باید گزینه SitSqlServer را انتخاب کنید .
مجددا دکمه next را کلیک کنید و به مرحله بعدی بروید در این مرحله از بخش جدولها ، جدول EF_Notes را که قبلا ایجاد کرده ایم را انتخاب کنید . و بر روی دکمه Finish کلیک کنید .اکنون برروی فایل ایجاد شده دابل کلیک کنید تا مدل خود را مطابق شکل زیر ببینید .
اکنون مدل داده های ما آماده است . پس به فولدر DesktopModules بر می گردیم و برروی فولدر EFNotes که ایجاد کرده بودیم کلیک راست می کنیم و گزینه Add New Item را انتخاب می کنیم
از پنجره ظاهر شده گزینه Web User Control را انتخاب می کنیم نام فایل را view .ascx می گزاریم مانند شکل زیر :
دکمه Add را کلیک کنید تا فایل مورد نظر ایجاد شود . کد زیر را در فایل جایگزین کنید .
<%@ Control Language="C#"
AutoEventWireup="true" CodeFile="View.ascx.cs"
Inherits="DotNetNuke.Modules.EFNotes.View"
%>
اکنون به قسمت سورس سی شارپ فایل بروید و کدهای زیر را جایگزین کنید .
اکنون گزینه طراحی Design را کلیک می کنیم و مانند شکل زیر عمل می کنیم :
سپس گزینه تنظیمات Configure Data Source را انتخاب می کنیم . شما از گزینه اول Name Connection باید نام ارتباطی Ef که قبلا ایجاد کرده ایم را انتخاب کنید و دکمه next را کلیک کنید اکنون در این مرحله نام ماهیت یا در واقع نام مدل جدول را انتخاب کنید و سپس فیلدهای مورد نظرتان را از این قسمت انتخاب کنید ما در اینجا گزینه اول را انتخاب می کنیم یعنی تمام فیلدهای جدول را انتخاب کرده ایم و برای ایجاد دستورات حذف و تغییر و اضافه سه گزینه پایین را تیک می زنیم .
اکنون یک کنترل Listview را از جعبه ابزار انتخاب کنید و بر روی فایل قرار دهید . در اینجا شما
باید منبع داده یعنی DataSource را همان EntityDataSource انتخاب کنید . پس گزینه Configure ListView را انتخاب کنید گزینه های
Enable Editing ,inserting,deleting را انتخاب کنید .
دکمه ok را کلیلک کنید . اکنون پروژه را ذخیره کنید .
نکته مهم برای استفاده از Entity Framework در dotnetnuke شما نیاز به
Entity FrameWork Model Adapter دارید که باید از لینک زیر آن را دانلود کنید . و سپس فایلهای مرجع زیر را به پروژه اضافه کنید .
اکنون باید تنظیمات مربوط به مدل ایجاد شده در APP_Code را اعمال کنیم برای اینکار از فولدر APP_Code t فولدر EFNotes باید فایل کد سی شارپ مدل را باز کنید .
در قسمت تعریف کلاس مدل جایی که نام کلاس تعریف می شود و پس از آن ارث بری تعریف می شود
global::System.Data.Objects.ObjectContext را حذف کنید و بجای آن عبارت زیر را بنویسید
BrandonHaynes.ModelAdapter.EntityFramework.DotNetNukeObjectContext
اکنون کد نویسی تمام شده ، پروژه را کامپایل کنید تا اجرا شود و سپس با یوزر hostوارد شوید .
از host شما باید گزینه extensions و سپس گزینه create new module را انتخاب کنید .
اکنون ماژول شما آماده است و کافیست تنظیمات آن را در dotnetnuke انجام دهید .
شاید برای شما هم این سوال مطرح شده باشد که Linq To Sql و Entity Framework چه تفاوتهایی دارند ، در این تایپیک این دو مورد را از جنبه های مختلفی مقایسه خواهم کرد .
1-complexity یا پیچیدگی : البته منظور از پیچیدگی از نگاه سخت و آسان بودن نیست بلکه از نگاه امکاناتی که در اختیار شما قرار می دهد . مسلما LINQ امکانات و پیچیدگیهای کمتری دارد.
2-model یا مدل سازی : ما در Entity Framework براحتی می توانیم مدل سازی کنیم علاوه بر آن از تمام ارتباطات بین جدولها پشتیبانی می کند LINQ از یک ارتباط یک به یک بین کلاسها و جدولهای بانک اطلاعاتی پشتیبانی می کند .
3-پشتیبانی از بانک اطلاعاتی : LINQ to SQL فقط از بانک اطلاعاتی Sql_Server پشتیبانی می کند در حالی که Entity Framework می تواند از بانکهای اطلاعاتی مختلفی پشتیبانی کند .
4-زمان توسعه پذیری :To SQL LINQ می تواند به راحتی استفاده شود و به سرعت کار شما را پیش ببرد . اما در نرم افزارهای پیچیده و بزرگ بدلیل داشتن امکانات محدود و کم دیگر جوابگو نیست .
5-وراثت : Entity Framework از وراثت بین کلاسها براحتی استفاده و پشتیبانی می کند در حالی که این خاصیت در LINQ وجود ندارد .
6-نوع فایل : LINQ در فایلی با پسوند DBML ذخیره می شوند در حالی که Entity Framework در فایلهای EDMX و CSDL ,SSDL که با فرمت xml است ذخیره می شوند .
7-نوع مرکب : ما در Entity Framework می توانیم فیلدی مرکب complex type تعریف کنیم . این فیلد چیزی شبیه به ساختار ها است . اما این امکان درTo SQL LINQ وجود ندارد
8-کویری : همانطور که در آموزشهای خودم نوشتم . Entity Framework از چندین سبک برای اجرای کویری استفاده می کند . Linq to Entity , EntitySQL , Query With Method
9-کارایی : هر دو از نظر سرعت در اولین اجرا شاید بتوان گفت کند هستند . اما Eitity Framework از نظر کارایی بهتر عمل می کند .
10-توسعه آینده : مایکروسافت چندان علاقه ای به توسعه و ادامه راه LINQ to SQL ندارد اما در عوض بیشتر تمرکز و توسعه را بر مبنای تکنولوژیهای دیگری گذاشته است از جمله Entity Framework
11-ساخت بانک اطلاعاتی از مدل : ما فقط در Entity Framework می توانیم ابتدا مدل خودمان را طراحی کنیم و سپس با استفاده از آن مدل ، بانک اطلاعاتی را تولید کنیم.
اگر تا به حال با برنامه نویسی سه لایه سرو کار داشتید و با آن برنامه نوشته اید حتما می دانید که این معماری از سه لایه
1- Data access layer
2- Business layer
3- Presentation layer
تشکیل شده است سوالی که مطرح می شود این است که جایگاه EDM در این معماری کدام لایه است شکل زیر تصویری بسیار گویا است که این جایگاه را به خوبی در لایه data نشان می دهد.