a

ABLY مقالات و مطالب مجموعه

صفحه اصلی / ABLY مقالات و مطالب مجموعه

بسم الله الرحمن الرحیم

آموزش Authentication در MVC

آموزش ASP.NET Identity

آموزش Asp.net Identity MVC (بخش اول)

آموزش Asp.net Identity (بخش دوم)

آموزش Asp.net Membership (رفع خطا)


پس از اراائه ASP.NET Identity امکانات جدیدی در اختیار برنامه نویسان قرار گرفت ولی متاسفانه کمی این تکنولوژی کمی گیج کننده است. به همین دلیل سعی کردم یک مثال را برای شما عزیزان در اینجا قرار دهم.
در این مقاله authentication بر اساس cookie را در ASP.NET Identity بررسی خواهیم کرد.

 

Project Setup

یک Empty ASP.NET MVC web application ایجاد کنید.
•    از منوی File  گزینه  New Project و سپس "ASP.NET Web Application" را انتخاب کنید.
•    از پنجره  باز شدهASP.NET  گزینه "Empty" و در قسمت تنظیمات گزینه MVC را انتخاب کنید.

 

Asp.net Identity

 

ASP NET Identity


حال یک پروژه ASP.NET MVC application ایجاد کردید.

 

 

 

 

بسم الله الرحمن الرحیم

 

 

 برای مشاهده سایر بخش های دوره آموزش Code First Data Annotations از طریق لینکهای زیر اقدام نمایید.

 

بخش اول

بخش دوم

بخش سوم

بخش چهارم

 

 

 

 

بخش چهارم

 

Index

ایندکس گزاری بر روی جداول

خاصیت Index در EF6.1 معرفی شده است و فقط توسط این نسخه از Entity Framework  می توانید این کار را انجام دهید. اگر از نسخه های قدیمی Entity Framework استفاده می کنید نمی توانید این کار را انجام دهبد.

شما می توانید بر روی یک یا چند ستون از جدول خود با استفاده از IndexAttribute ایندکس گذاری کنید.

اضافه کردن این خاصیت به یک یا چند پراپرتی باعث می شود EF در زمان ایجاد دیتابیس یا اگر شما از Code First Migrations استفاده کنید scaffold ایندکس های مربوطه را ایجاد کند.

مثال، در زیر index بر روی ستون های Rating و Posts ایجاد شده است.

 

بسم الله الرحمن الرحیم

 

 

 برای مشاهده سایر بخش های دوره آموزش Code First Data Annotations از طریق لینکهای زیر اقدام نمایید.

 

بخش اول

بخش دوم

بخش سوم

بخش چهارم

 

 

 

بخش سوم

 

Table and Column

اگر شما با Code First دیتابیس خود را ایجاد می کنید، ممکن است بخواهید نام جدول و ستونهای خود را تغییر دهید. شما همچنین می توانید از Code First برای یک دیتابیس که قبلا وجود داشته است استفاده کنید. همیشه این طور نیست که نام جدول ها و ستون ها با نام کلاس ها و پراپرتی ها یکسان باشد.

نام کلاس من Blog بود و بر اساس قرارداد Code First، به صورت پیش فرض این کلاس به یک جدول با نام Blog نگاشت (map) می شود. اگر شما این را نمی خواهید می توانید نام جدول خود را با استفاده از خاصیت Table تغییر دهید.
در اینجا ما برای مثال نام کلاس Blog را برای ایجاد جدول به نام InternalBlogs تغییر داده ایم:

 

[Table("InternalBlogs")] 
public class Blog

 

 

 

 

بسم الله الرحمن الرحیم

 

بخش اول

بخش دوم

بخش سوم

بخش چهارم

 

 

بخش دوم

 

ComplexType

نوع های پیچیده

ممکن است شما یک نوع غیر معمول برای فیلد های خود بخواهید تعریف کنید، این نوع شما ممکن است یک کلاس باشد، مثلا کلاس زیر را در نظر بگیرید:

 

public class BlogDetails 
{ 
    public DateTime? DateCreated { get; set; } 
 
    [MaxLength(250)] 
    public string Description { get; set; } 
}
 

بسم الله الرحمن الرحیم

 برای مشاهده بخش های دوره آموزش Code First Data Annotations از طریق لینکهای زیر اقدام نمایید.

بخش اول

بخش دوم

بخش سوم

بخش چهارم

 

 

آموزش Code First

بخش اول

Data Annotations

در طراحی پایگاه داده به وسیله Entity Framework  در MVC برای مشخص کردن خصوصیت های جداول و فیلدها می بایست از خاصیتی به نام Data Annotations استفاده کنید. کار با این خصوصیت بسیار ساده می باشد.
ما دو کلاس را برای پروژه خود نیاز داریم، این دو کلاس را با نام های Blog.cs و Post.cs در فولدر Model پروژه MVC خود ایجاد می کنیم و کد های زیر را در آن ها قرار می دهیم.
 

 

public class Blog 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public string BloggerName { get; set;} 
    public virtual ICollection<Post> Posts { get; set; } 
} 

public class Post 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public DateTime DateCreated { get; set; } 
    public string Content { get; set; } 
    public int BlogId { get; set; } 
    public ICollection<Comment> Comments { get; set; } 
}
 

بسم الله الرحمن الرحیم

در بعضی مواقع شما نیاز دارید که یکی از کامندهای کیبورد را خودتان اجرا کنید، مثلا شما می خواهید پس از بازشدن برنامه یک MessageBox باز شود و پس از آن اگر کاربر بر روی فرم شما کلیک کرد کامند Enter  کیبورد شما اجرا شود.

// Clicking Button1 causes a message box to appear. 
    private void Button1_Click(System.Object sender, System.EventArgs e)
    {
        MessageBox.Sho

بسم الله الرحمن الرحیم

 معرفی T4MVC

T4MVC می تواند بر روی نسخه های Visual Studio 2010, 2012  و  2013نصب شود وASP.NET MVC 4.0  و  5.0این Package را پشتیبانی می کنند، شاید بتوانید بر روی سایر نسخه ها از این Package استفاده کنید اما این Package فقط بر روی گزینه های گفته شده تست شده است.

 

نصب T4MVC

برای نصب این Package کافی است که دستور زیر را از طریق Package Manager Console اجرا کنید

Install-Package T4MVC

پس از اجرای این دستور دو فایل به پروژه شما اضافه می شود.

هدف T4MVC

این Package برای جلوگیری از نوشتن اسامی کنترلر ها و اکشن ها و در نهایت view ها به صورت Hard Code مورد استفاده قرار می گیرد.

برای مثال کدزیر را در نظر بگیرید:

<% Html.RenderPartial("DinnerForm"); %>

 

ما از عبارت های رشته ای برای فراخوانی این Partial استفاده کرده ایم، اگر فردا شما بخواهید این نام را تغییر دهید باید در بهترین و سریعترین روش ممکن با استفاده از Finde ویژوال استادیو تمامی نام های مربوطه را تغییر دهید.

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

T4MVC در واقع نام تمامی View,Conreoller,Action ها را به صورت خودکار در خود ذخیره می کند و عملا یک Enumeration  برای شما به وجود می آورد تا در آینده در صورتی که نامی را برای یک View,Conreoller,Action عوض کردید، این نام در تمامی پروژه عوض شود.

مثال:

<% Html.RenderPartial("DinnerForm"); %>

از این به بعد ما نام ها را به صورت زیر خواهیم نوشت:

 

<% Html.RenderPartial(MVC.Dinners.Views.DinnerForm); %>

بسم الله الرحمن الرحیم

fluent API

در MVC برای ایجاد روابط بین جداول می توانید از fluent API استفاده کنید، این روش برای کد نویسی و طراحی دیتابیس به روش Code First می باشد:

 

One-to–Zero-or-One (روابط یک به یک)

modelBuilder.Entity<OfficeAssignment>() 
    .HasKey(t => t.InstructorID); 

به رابطه بالا One-to–Zero گفته می شود زیرا شما فقط کلید اصلی جدول را مشخص کرده اید آن را به هیچ جدول دیگری ارتباط نداده اید.

modelBuilder.Entity<OfficeAssignment>() 
    .HasRequired(t => t.Instructor) 
    .WithOptional(t => t.OfficeAssignment);

در این رابطه ما یک رابطه One-to-One ایجاد کرده ایم. در این رابطه سمت OfficeAssignment اختیاری است.

بسم الله الرحمن الرحیم

خطای زیرا شاید خیلی از شما دوستان عزیز نیز مشاده کردید:

Introducing FOREIGN KEY constraint 'FK_dbo.aspnet_UsersInRoles_dbo.aspnet_Users_UserId' on table 'aspnet_UsersInRoles' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint. See previous errors

برای حل این مشکل می توانید از Fluid API استفاده کنید،

در این مثل اگر من کد زیر را به Context خود اضافه کنم مشکل بالا برطرف خواهد شد:

protected override void OnModelCreating( DbModelBuilder modelBuilder )
{

        modelBuilder.Entity<aspnet_UsersInRoles>().HasMany(i => i.Users).WithRequired().WillCascadeOnDelete(false);
}

همچنین با استفاده از این کد می توانید تمامی CASCADE DELETES ها را از بین ببرید:

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

اینم مشکل زمانی رخ می دهد که شما در طراحی دیتابیس خود یک چرخه یا Loop ایجاد کرده اید مانند تصویر زیر:

0912 097 5516 :شماره تماس
0713 625 1757 :شماره تماس