پارادایم مایکروسافت MVC ادعا می کند که بسیاری از فرآیندهای اساسی برنامه های کاربردی وب مانند گردش کار ورود به سیستم محلی، گردش کار ثبت نام کاربر، گردش کار ورود به سیستم، استفاده از لاگین های خارجی مانند فیس بوک، توییتر، لینکدین و غیره را آسان می کند. همه ما می توانیم آن را با قالب های داخلی برای برنامه های کاربردی وب نوع MVC. اما، وقتی در مورد تبدیل ASP کلاسیک موجود صحبت می کنیم . فرم وب NETبرنامه های کاربردی برای پارادایم های چارچوب موجودیت MVC، اولین چیزی که به ذهن می رسد این است که چگونه پایگاه داده موجود خود را با پارادایم جدید MVC یکپارچه کنیم؟ مهمتر از آن، حتی اگر پایگاه داده با موفقیت یکپارچه شود، جریان ورود اولیه چگونه انجام می شود؟ در چنین شرایطی، رویکرد اول کد هرگز مورد علاقه نیست. در عوض، رویکرد اول پایگاه داده مطلوب است، چرا؟ از آنجا که برنامه های کاربردی سازمانی بزرگ سرمایه گذاری زیادی برای علم داده دارند که عموماً در سطح پایگاه داده به جای سطح کد انجام می شود.
بنابراین، برای بحث امروز، موارد زیر را نشان خواهم داد:
- نحوه ادغام پایگاه داده موجود در برنامه وب ASP.NET MVC 5 با استفاده از رویکرد اول پایگاه داده ADO.NET .
- نحوه پیکربندی جریان کار ورود ساده برای ادغام ورودهای موجود با برنامه وب ASP.NET MVC 5.
پیش نیازهای زیر قبل از ادامه این آموزش آورده شده است:
پیش نیازها:
قبل از حرکت بیشتر، باید در مورد موارد زیر آگاهی داشته باشید:
- ASP.NET MVC 5
- ADO.NET
- چارچوب نهاد
- OWIN
- مدل هویت پایه ادعا
- برنامه نویسی C
- C# LINQ
می توانید کد منبع کامل را دانلود کنید یا می توانید بحث گام به گام زیر را دنبال کنید. کد نمونه در Microsoft Visual Studio 2013 Ultimate توسعه داده شده است. من از SQL Server 2008 به عنوان پایگاه داده استفاده می کنم.
بیایید اکنون شروع کنیم.
- ابتدا باید یک پایگاه داده نمونه با جدول "ورود" ایجاد کنید، من از اسکریپت های زیر برای تولید پایگاه داده نمونه خود استفاده می کنم. نام پایگاه داده من " AdoNetIntegration " است، در زیر قطعه مربوط به آن است
- USE [AdoNetIntegration]
- GO
- /****** Object: StoredProcedure [dbo].[LoginByUsernamePassword] Script Date: 03/15/2016 21:33:52 ******/
- IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[LoginByUsernamePassword]') AND type in (N'P', N'PC'))
- DROP PROCEDURE [dbo].[LoginByUsernamePassword]
- GO
- /****** Object: Table [dbo].[Login] Script Date: 03/15/2016 21:33:50 ******/
- IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Login]') AND type in (N'U'))
- DROP TABLE [dbo].[Login]
- GO
- /****** Object: Table [dbo].[Login] Script Date: 03/15/2016 21:33:50 ******/
- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
- SET ANSI_PADDING ON
- GO
- IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Login]') AND type in (N'U'))
- BEGIN
- CREATE TABLE [dbo].[Login](
- [id] [int] IDENTITY(1,1) NOT NULL,
- [username] [varchar](50) NOT NULL,
- [password] [varchar](50) NOT NULL,
- CONSTRAINT [PK_Login] 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]
- END
- GO
- SET ANSI_PADDING OFF
- GO
- SET IDENTITY_INSERT [dbo].[Login] ON
- INSERT [dbo].[Login] ([id], [username], [password]) VALUES (1, N'my-login', N'my-password-123')
- SET IDENTITY_INSERT [dbo].[Login] OFF
- /****** Object: StoredProcedure [dbo].[LoginByUsernamePassword] Script Date: 03/15/2016 21:33:52 ******/
- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
- IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[LoginByUsernamePassword]') AND type in (N'P', N'PC'))
- BEGIN
- EXEC dbo.sp_executesql @statement = N'-- =============================================
- -- Author: <Author,,Asma Khalid>
- -- Create date: <Create Date,,15-Mar-2016>
- -- Description: <Description,,You are Allow to Distribute this Code>
- -- =============================================
- CREATE PROCEDURE [dbo].[LoginByUsernamePassword]
- @username varchar(50),
- @password varchar(50)
- AS
- BEGIN
- SELECT id, username, password
- FROM Login
- WHERE username = @username
- AND password = @password
- END
- '
- END
- GO
در اینجا من یک جدول ورود ساده با داده های نمونه و یک روش ذخیره شده برای بازیابی داده ها ایجاد کرده ام. قبل از ادغام پایگاه داده موجود، اجازه دهید پروژه جدید ASP.MVC 5 را با الگوی نمونه ایجاد کنیم و به چند چیز در اینجا نگاه کنیم.
- پروژه جدید Visual Studio Web MVC ایجاد کرده و آن را اجرا کنید. موارد زیر را در مرورگر وب مشاهده خواهید کرد:
این قالب اصلی برای ASP.MVC5 است.
- در اینجا چند چیز را رعایت کنیم. اول اینکه در این الگوی موجود که رویکرد اول کد است، نمیتوانیم از ویژگی ورود استفاده کنیم زیرا هیچ اطلاعات ورود به سیستم ایجاد نشده است. ثانیا، ما هیچ پایگاه داده ای با هیچ پیکربندی برای پایگاه داده نداریم. بنابراین، زمانی که ما واقعاً از این الگو برای ثبت نام ورود استفاده می کنیم، پایگاه داده کجا خواهد رفت؟ پنجره "Server Explorer" را باز کنید و مشاهده کنید که چیزی زیر "اتصال داده" وجود ندارد. توجه داشته باشید که پوشه "App_Data" در پنجره "Solution Explorer" نیز مانند شکل زیر خالی است:
- اجازه میدهیم یک ورود تصادفی و ورود به این نمونه برنامه را مطابق شکل زیر ثبت کنیم:
در اینجا، پس از ایجاد یک ورود، شما به طور خودکار وارد این برنامه می شوید و می توانید ایمیل ورود به سیستم خود را قبل از ورود به سیستم در بالا سمت راست مشاهده کنید.
- اکنون یک رشته اتصال جدید در "Web.config" مانند شکل زیر مشاهده خواهید کرد:
- همچنین پایگاه داده جدیدی را خواهید دید که در پوشه "App_Data" ایجاد شده است که در اکسپلورر راه حل مانند شکل زیر وجود ندارد:
- توجه داشته باشید که در پنجره "Server Explorer" یک اتصال جدید در زیر " Data Connection " موجود است و اکنون مطابق شکل زیر قابل گسترش است:
- "اتصال داده" را گسترش دهید و تعدادی جداول ایجاد شده را مشاهده خواهید کرد، این جداول توسط داربست خودکار مدیریت کاربر MVC ایجاد شده اند و با لایه امنیتی میان افزار OWIN ادغام شده اند تا به ما اجازه دهند از یک مجوز امن در سراسر برنامه با "[Authorize] استفاده کنیم. ویژگی "به جای ایجاد متغیرهای جلسه مانند فرم وب کلاسیک ASP.NET برای ایمن کردن ورود به سیستم، جریان log-off مطابق شکل زیر:
اکنون، ما به این پایگاه داده نیاز نداریم، در عوض به پایگاه داده موجود خود نیاز داریم تا در این برنامه یکپارچه شویم. به منظور ادغام پایگاه داده موجود، اجازه دهید این پایگاه داده را حذف کرده و اطلاعات رشته اتصال آن را از فایل "Web.config" همانطور که در زیر نشان داده شده است حذف کنید.
- اکنون روی پروژه در " Solution Explorer " کلیک راست کرده، سپس "Add" را انتخاب کرده و روی "ADO.NET Entity Data Model" مانند شکل زیر کلیک کنید:
- اکنون گزینه " EF Designer from Database " را انتخاب کرده و مطابق شکل زیر روی next کلیک کنید:
- در پنجره بعدی، روی «اتصال جدید» کلیک کنید، پنجرههای «ویژگیهای اتصال» ظاهر میشوند، اعتبار سرور SQL خود را ارائه کرده و پایگاه داده «AdoNetIntegration» را که قبلا ایجاد کردهایم انتخاب کنید و مطابق شکل زیر روی OK کلیک کنید:
- «بله، شامل دادههای حساس در رشته اتصال» را انتخاب کنید تا اعتبار پایگاه داده سرور SQL خود را در برنامه خود قرار دهید و مطابق شکل زیر روی بعدی کلیک کنید:
- در پنجره " Entity Data Model Wizard " آنچه را که می خواهید به برنامه وب وارد کنید، انتخاب کنید. من فقط رویه ذخیره شده خود را وارد می کنم و مطابق شکل زیر روی next کلیک می کنم:
در اینجا می توانید مشاهده کنید که پس از گنجاندن رویه فروشگاه من، پارادایم چارچوب نهاد به طور خودکار کلاس های مدل نوع پیچیده ایجاد می کند.
اکنون که پایگاه داده موجود خود را ادغام کردهایم، بیایید این قالب موجود را برای ایجاد یک جریان کاری ورود ساده ایجاد کنیم که با پایگاه داده ما یکپارچه شده است و از لایه امنیتی میان افزار OWIN برای مجوز امن استفاده میکند.
- فایل های زیر را از پروژه حذف کنید زیرا به آنها نیاز نداریم: