۷۶ مطلب با کلمهی کلیدی «آموزش MVC» ثبت شده است
اضافه کردن متد به LINQ
بسم الله الرحمن الرحیم
می خواهیم به تمامی لیست هایی که از نوع double ایجاد می شوند یک متد برای پیدا کردن عنصر میانی آنها بنویسیم
public static class LINQExtension
{
public static double Median(this IEnumerable<double> source)
{
if (source.Count() == 0)
{
throw new InvalidOperationException("Cannot compute median for an empty set.");
}
var sortedList = from number in source
orderby number
select number;
int itemIndex = (int)sortedList.Count() / 2;
if (sortedList.Count() % 2 == 0)
{
// Even number of items.
return (sortedList.ElementAt(itemIndex) + sortedList.ElementAt(itemIndex - 1)) / 2;
}
else
{
// Odd number of items.
return sortedList.ElementAt(itemIndex);
}
}
}
ادامه مطلب...
Linq extension method
بسم الله الرحمن الرحیم
می خواهیم یک Extesion Method مانند متدهای Linq برای Model ایی خاص بنویسیم.
دو نکته را برای نوشتم متدهای توسعه (Extension Method) باید رعایت کنید:
1- متد را باید در کلاسی بنویسید که از نوع static باشد
2- namespace شما باید با namespace کلاسی که می خواهید برای آن Extension Method بنویسید یکسان باشد
ما می خواهیم وقتی از شی DbContext مدل Active را انتخاب می کنیم مانند متد ()FirstOrDefault لینک (LINQ) یک متد برای اجرای یک دستور خاص نمایش داده شود:
public static class Extensions
{
public IQueryable<T> Active<T>(this IQueryable<T> source)
where T : YourEntityType
{
return source.Where(a => ((a.publishEnd > DateTime.Now) || (a.publishEnd == null))
&& ((a.publishStart <= DateTime.Now) || (a.publishStart == null))
&& a.active == true);
}
}
برای فراخوانی متد به صورت زیر می توانیم عمل کنیم:
var item = db.myTable.Active().SingleOrDefault(...);
آموزش ساخت Connection String
بسم الله الرحمن الرحیم
یک راه ساده برای ایجاد و تست Connection String امروز فرا خواهید گرفت.
برای شروع کافی است در دسکتاپ خود کلیک راست کنید و گزینه new را انتخاب و سپس یک فایل Text Document ایجاد کنید حال پسوند فایل ایجاد شده را به UDL تغییر دهید (یادتان باشد باید پسوند فایلها را ابتدا از طریق Control Panel -> Folder Options -> View گزینه Hide extensions for known file type را غیر فعال کنید ). حال بر روی فایل دابل کلیک کنید تا باز شود و به ترتیب می توانید مشخصات نام سرور خود، نام کاربری و کلمه عبور سرور خود و در نهایت انتخاب پایگاه داده خود را انجام دهید.
در نهایت پس از تکمیل اطلاعات بر روی گزینه Test Connection کلیک کنید تا مطمن شوید یک کانکشن صحیح ایجاد شده است.
برای استفاده از Connection String تولید شده می توانید بر روی فایل کلیک راست کنید و آن را دریک برنامه مثل Notepad باز کنید و از اطلاعات آن استفاده کنید.
آموزش Authentication در MVC
بسم الله الرحمن الرحیم
در بعضی مواقع ممکن است شما از نوع پیش فرض authentication نمی خواهید استفاده می کنید و دوست دارید یک احراز هویت اختصاصی برای خود داشته باشید. هر کاربر شما یک کاربر منحصر به فرد خواهد بود که مجموعه ای از سطوح دسترسی را برای دسترسی به بخش های مختلف وب سایت شما خواهد داشت. وقتی که کاربر شما تایید شود می تواند وابسته به Role هایی که دارد از منابع مختلف استفاده کند.
ASP.NET به وسیله دو interface به نام های، IPrincipal and IIdentity سطوح دسترسی و identity و Role را برای هر کاربر ارائه می دهد. شما می توانید یک سطح دسترسی اختصاصی برای خود به وسیله اینترفیس های IPrincipal and IIdentity، که در HttpContext باند شده اند ایجاد نمایید.
ادامه مطلب...
public class CustomPrincipal : IPrincipal
{
public IIdentity Identity { get; private set; }
public bool IsInRole(string role)
{
if (roles.Any(r => role.Contains(r)))
{
return true;
}
else
{
return false;
}
}
public CustomPrincipal(string Username)
{
this.Identity = new GenericIdentity(Username);
}
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string[] roles { get; set; }
}
خطا Validation failed for one or more entities
بسم الله الرحمن الرحیم
طبیعتا تاکنون در حین اجرای پروژه با خطای زیر برخورد کردید:
Validation failed for one or more entities. See 'EntityValidationErrors' property for more details. Description:
An unhandled exception occurred during the execution of the current web request.
Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Data.Entity.Validation.DbEntityValidationException:
Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
هر یک از شما دوستان ممکن است راه حل های زیادی برای حل این مشکل داشته باشید.
در اینجا خطایی به دلیل خالی بودن و تکمیل نشده اطلاعات رخ می دهد در صورتی که ممکن است این فیلدها بر روی فرم اصلا وجود نداشته اند مثلا شما یک ویو مدل از مدل ساخته اید و تنها بخشی از اطلاعات مدل را می خواهید برروز کنید.
خطا Cannot insert the value NULL into column
بسم الله الرحمن الرحیم
خطای زیر را مشاهده کنید:
Cannot insert the value NULL into column 'FirstLastName', table 'RequestSessions'; column does not allow nulls. INSERT fails.The statement has been terminated.
در مدلی که دارید کار می کنید فیلدی وجود دارد که در دیتابیس نمی تواند null باشد برای رفع این مشکل باید در اکشن خود مدل را مقدار دهی کنید
مثلا
Account.FirstLastName=”Esmaeil”;
آموزش Asp.net Identity MVC
بسم الله الرحمن الرحیم
پس از اراائه 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 MVC application ایجاد کردید.
ادامه مطلب...
آموزش Code First Data Annotations - بخش چهارم
بسم الله الرحمن الرحیم
برای مشاهده سایر بخش های دوره آموزش Code First Data Annotations از طریق لینکهای زیر اقدام نمایید.
بخش چهارم
Index
ایندکس گزاری بر روی جداول
خاصیت Index در EF6.1 معرفی شده است و فقط توسط این نسخه از Entity Framework می توانید این کار را انجام دهید. اگر از نسخه های قدیمی Entity Framework استفاده می کنید نمی توانید این کار را انجام دهبد.
شما می توانید بر روی یک یا چند ستون از جدول خود با استفاده از IndexAttribute ایندکس گذاری کنید.
اضافه کردن این خاصیت به یک یا چند پراپرتی باعث می شود EF در زمان ایجاد دیتابیس یا اگر شما از Code First Migrations استفاده کنید scaffold ایندکس های مربوطه را ایجاد کند.
مثال، در زیر index بر روی ستون های Rating و Posts ایجاد شده است.
public class Postادامه مطلب...
{
public int Id { get; set; }
public string Title { get; set; }
public string Content { get; set; }
[Index]
public int Rating { get; set; }
public int BlogId { get; set; }
}
آموزش Code First Data Annotations بخش سوم
بسم الله الرحمن الرحیم
برای مشاهده سایر بخش های دوره آموزش Code First Data Annotations از طریق لینکهای زیر اقدام نمایید.
بخش سوم
Table and Column
اگر شما با Code First دیتابیس خود را ایجاد می کنید، ممکن است بخواهید نام جدول و ستونهای خود را تغییر دهید. شما همچنین می توانید از Code First برای یک دیتابیس که قبلا وجود داشته است استفاده کنید. همیشه این طور نیست که نام جدول ها و ستون ها با نام کلاس ها و پراپرتی ها یکسان باشد.
نام کلاس من Blog بود و بر اساس قرارداد Code First، به صورت پیش فرض این کلاس به یک جدول با نام Blog نگاشت (map) می شود. اگر شما این را نمی خواهید می توانید نام جدول خود را با استفاده از خاصیت Table تغییر دهید.
در اینجا ما برای مثال نام کلاس Blog را برای ایجاد جدول به نام InternalBlogs تغییر داده ایم:
[Table("InternalBlogs")]
public class Blog
Column annotation
Column annotation نیز برای تغییر نام یک پراپرتی به فیلد در دیتابیس مورد استفاده قرار می گیرد. با استفاده از این خاصیت شما می توانید نام، data type و حتی ترتیب نمایش این فیلدها را در یک جدول دیتابیس مشخص کنید.
در این جا یک مثال برای خاصیت Column وجود دارد:
آموزش Code First Data Annotations - بخش دوم
بسم الله الرحمن الرحیم
برای مشاهده سایر بخش های دوره آموزش Code First Data Annotations از طریق لینکهای زیر اقدام نمایید.
بخش دوم
ComplexType
نوع های پیچیده
ممکن است شما یک نوع غیر معمول برای فیلد های خود بخواهید تعریف کنید، این نوع شما ممکن است یک کلاس باشد، مثلا کلاس زیر را در نظر بگیرید:
public class BlogDetailsادامه مطلب...
{
public DateTime? DateCreated { get; set; }
[MaxLength(250)]
public string Description { get; set; }
}
آموزش Code First Data Annotations
بسم الله الرحمن الرحیم
برای مشاهده بخش های دوره آموزش 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; }
}
Key
تعیین کلید اصلی جداول
Entity Framework برای ایجاد کلید اصلی جدول شما در دیتابیس، در مدلی که طراحی کردید به دنبال نام Id و یا نام کلاس شما به علاوه کلمه Id (مثلا BlogId) می گردد، هر یک از این دو پراپرتی در صورتی که در کلاس شما وجود داشته باشد تبدیل به کلید اصلی در جدول پایگاه داده می شود.
در صورتی که هیچ یک از این دو کلمه در کلاس مدل شما وجود نداشته باشد Entity Framework یکexception برای این مورد throw می کند. برای حل این مشکل کافی است از خاصیتی به نام [Key]در بالای فیلد کلید خود استفاده کنید.
مثلا ما می خواهیم در اینجا نام کلید اصلی خود راPrimaryTrackingKey قرار دهیم پس باید کد خود را به صورت زیر تغییر دهیم.
T4MVC
بسم الله الرحمن الرحیم
معرفی 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 در Code First
بسم الله الرحمن الرحیم
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 اختیاری است.
برای اجباری کردن هر دو سمت در یک رابطه یک به یک می توانید به صورت زیر عمل کنید:
modelBuilder.Entity<OfficeAssignment>()ادامه مطلب...
.HasKey(t => t.InstructorID);
modelBuilder.Entity<Instructor>()
.HasRequired(t => t.OfficeAssignment)
.WithRequiredPrincipal(t => t.Instructor);
خطای cycles or multiple cascade paths
بسم الله الرحمن الرحیم
خطای زیرا شاید خیلی از شما دوستان عزیز نیز مشاده کردید:
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 ایجاد کرده اید مانند تصویر زیر:
اگر به متن خطای بالا دقت کنید مشاهده خواهید کرد که عبارت may cause cycles or multiple cascade paths قید شده است، همان طور که خدمتتان عرض کردم، اگر در طراحی دیتابیس شما چندین جدول را به صورت بالا طراحی کنید که با یکدگیر در ارتباط باشند و این ارتباط به صورت یک چرخه شود، و سعی کنید بر روی این چرخه CASCADE ایجاد کنید، SQL Server نمی تواند متوجه بشود که چطور فرایند بروز رسانی Update CASCADE یا حذف Delete CASCADE شما را مدیریت کند زیرا هر یک از این جداول بر روی یکدیگر تاثیر می گذارند و در صورتی که فرایند CASCADE آغاز شود نقطه پایانی وجود نخواهد داشت.
Delete CASCADE و Update CASCADE
برای حل این مشکل می توانید به صورت زیر عمل کنید:
1- فرایند CASCADE را غیر فعال کنید (در صورت غیر فعال کردن باید این فرایند را به صورت Manually مدیریت کنید)
2- Relation را حذف کنید (در صورت حذف کردن باید این فرایند را به صورت Manually مدیریت کنید)
طراحی دیتابیس
در چنینی شرایطی معمولا طراح دیتبیس اشتباهی را مرتکب شده است، پس بهتر است از او بخواهید تا دیتابیس خود را مجددا بررسی کنید، زیرا مدیریت کردن راه حل های بالا که قید شد کمی دقت لازم دارد
انشالله در اولین فرصت روش های ایجاد Relation را در MVC معرفی خواهم کرد
Strongly typed
بسم الله الرحمن الرحیم
Strongly typed
زبان های Strongly typed به شما اجازه نمی دهند که از یک نوع به نام یک نوع دیگر استفاده کنید. مثلا string به int
در Strongly typed به صورت اتوماتیک یک نوع به نوع دیگر تبدیل نمی شود. مثلا در زبان Perl می توانید یک رشته
شامل "123" در یک numeric قرار دهید و این به صورت اتوماتیک تبدیل به 123 می شود اما زبان های strongly typed این کار را انجام نمی دهند مثلا python یک زبان strongly typed است.
طبیعتا خطاهای زیادی را در هنگام کار کردن با سی شارپ مخصوصا LINQ در ارتباط با strongly typed مشاهده کردید:
مثال
var answer = 1 * "1";
این دستور اجرا نمی شود، بلکه شما باید خودتان به صورت صریح تبدیل نوع را انجام دهید.
اما در PHP دستور زیر اجرا می شود:
$x = "3" * 1; // is correct in php
استفاده از یک تابع کنترلر در View
بسم الله الرحمن الرحیم
طبیعتا شما تمامی توابع خود را کلاس های Common نمی نویسید و مکن است بخواهید یک تابع ساده را که در Controller نوشته شده است در یک view استفاده کنید. برای استفاده از توابع در View می توانید به صورت زیر عمل کنید:
تابع زیر در کنترلر نوشته شده است:
public int getClientID(string login)
{
var context = new MyEntity(new Uri("host/MyWCF.svc/"));
var userID = from persons in context.PERSON
where persons.LOGIN == login
select persons.USER_ID;
int uID = userID.First();
var cli = from client in context.CLIENT
where client.USER_ID == uID
select client.CLIENT_ID;
int cliID = cli.First();
return cliID;
}
می توان این تابع را به صورت زیر فراخوانی کرد اما با Error مواجه خواهید شد
Client : @{ ((HomeController)(this.ViewContext.Controller)).getClientID(User.Identity.Name); }
خطایی که پس از اجرای این دستور دریافت می کنید به صورت زیر است:
Can only specify query options (orderby, where, take, skip) after last navigation
At line int uID = userID.First();
راه ساده ای که قبلا نیز شما از آن حتما استفاده کرده اید به صورت زیر است:
@Html.Action("Home","getClientID", new {login=User.Identity.Name})
بروز رسانی دیتابیس و خطا One or more validation errors were detected during model generation
بسم الله الرحمن الرحیم
بروز خطای
An exception of type 'System.Data.Entity.ModelConfiguration.ModelValidationException' occurred in EntityFramework.dll but was not handled in user code
Additional information: One or more validation errors were detected during model generation:
یا خطای
One or more validation errors were detected during model generation:
پس از اجرای کد زیر
db.Database.Initialize(true);
برای رفع این خطا کافی است که پایگاه داده خود را با استفاده از دستور
Update-database –force
بروز نمایید.
این خطا به این دلیل است که اگر Migration بخواهد جداول شما را تغییر دهد اطلاعات شما به دلیل حذف شدن فیلد یا فیلدهایی از بین خواهد می رود؛ به همین دلیل این کار را بر عهده خودتان قرار می دهد (سلب مسئولیت )
آموزش Asp.net Identity
بسم الله الرحمن الرحیم
برای شروع کار Visual Studio را باز کنید سپس New-> project را انتخاب کنید و در پنجره باز شده مانند زیر NET framework 4.5 را انتخاب کنید و سپس بر روی گزینه ASP.NET Web Application کلیک کنید.
حال گزینه Emprty را انتخاب کنید و سپس نوع پروژه را از بخش پایین MVC انتخاب نمایید تا پروژه شما ایجاد شود.
حال پروژه شما ایجاد شده است و کافی است در پنجره Package Manager Console دستور زیرا برای ساخت یک پروژه ASP.NET Identity ایجاد کنید.
Install-Package Microsoft.AspNet.Identity.Samples -Pre
مدت زمان زیادی را باید منتظر بمانید زیرا تمامی package های زیر توسط این دستور نصب خواهد شد
bootstrap (≥ 3.0.0)
Microsoft.Aspnet.Identity.Core(≥ 2.1.0-alpha1)
Microsoft.Aspnet.Identity.EntityFramework(≥ 2.1.0-alpha1)
Microsoft.Aspnet.Identity.Owin(≥ 2.1.0-alpha1)
Newtonsoft.Json(≥ 5.0.6)
Microsoft.Aspnet.Mvc(≥ 5.1.1.0)
Microsoft.Aspnet.Web.Optimization(≥ 1.1.3)
jQuery(≥ 1.10.2)
jQuery.Validation(≥ 1.11.1)
Modernizr(≥ 2.6.2)
Microsoft.Owin.Host.SystemWeb(≥ 2.1.0)
Microsoft.Owin.Security(≥ 2.1.0)
Microsoft.Owin.Security.Facebook(≥ 2.1.0)
Microsoft.Owin.Security.Cookies(≥ 2.1.0)
Microsoft.Owin.Security.Google(≥ 2.1.0)
Microsoft.Owin.Security.Twitter(≥ 2.1.0)
Microsoft.Owin.Security.MicrosoftAccount(≥ 2.1.0)
Microsoft.jQuery.Unobtrusive.Validation(≥ 3.1.1)
Respond(≥ 1.2)
اگر خطایی در ارتباط با Timeout در خصوص پایین بودن سرعت اینترنت خود دریافت کردید مجددا دستور بالا را اجرا کنید تا فایلهای دانلود نشده، دانلود شوند، نگران نباشید فایل ها بر روی یکدیگر جایگزین خواهد شد.
حال به سادگی می توانید کد های مایکروسافت را برای استفاده از ASP.NET Identity بررسی کنید و بیشتر با این معماری آشنا شوید.
در بخش دیگر این معماری را به صورت کامل بررسی خواهیم کرد.
Entity Farmework و Code First
بسم الله الرحمن الرحیم
برای طراحی پایگاه داده به وسیله Entity Farmework و Code First بهتر است این چند نکته را رعایت فرمایید:
بهتر است از نام Id به عنوان نام تمامی کلید های اصلی جداول استفاده کنید هر چند در بحث
convention over configuration این نکته مورد قبول است اما چیزی را که همه آن را به عنوان یک قرارداد نانوشته قبول دارند را عوض نکنید تا برای انجام کار توضیحاتی لازم نباشد.
بهتر است از نوع GUID برای کلید های اصلی جداول استفاده کنید. نوع int از لحاظ واکشی اطلاعات سریعتر است زیرا مقایسه عددی سریعتر از مقایسه رشته ای است.
باید در نظر داشته باشید در جداولی مثل شهر، استان، کشور می توانید از نوع int برای کلید اصلی استفاده کنید و هیچ مشکلی نخواهد بود اما بهتر است برای جداول اطلاعاتی که شماره ها بسیار ارزشمند هستند و بهتر است در کل دیتابیس عدد منحصر به فرد باشد از نوع GUID استفاده شود.
بهتر است نام کلیدهای خارجی یک نام از جدول + کلمه ای دی باشد:
مثلا: ProductId
برای تعیین نامی مشخص برای ذخیره property ها در دیتابیس می توانید به صورت زیر عمل کنید:
[Column(“ProductId", TypeName="Guid")]
با توجه به اینکه در MVC به صورت پیش فرض اگر Maxlength برای یک Property String تعیین نشود nvarchar(MAX) در دیتابیس در نظر گرفته می شود، لذا برای تمامی Property مقدار Maxlength را تعریف کنید مگر در شرایطی که نیاز به رشته های طولانی دارید.
با توجه به نحوه ذخیره سازی رشته ها در SQL Server ، اگر یک رشته می تواند در نوع nvarchar(300) ذخیره شود از این نوع استفاده کنید.
با توجه به اینکه در Entity Framework 6 از روی نوع enum فیلد مناسب در دیتابیس ساخته می شود اما بهتر است فیلدهای از نوع enum به صورت int تعریف شوند و شما خودتان نوع بازیابی شده از دیتابیس را به enum تبدیل کنید.
مثلا
Public int CustomerType {get; set;};
در نام گذاری property ها این نکته را در نظر داشته باشید که نباید از کلمات کلیدی (SQL Server,Oracle,…) استفاده کنید
مثلا: [Order]
بازیابی دیتابیس (Restore) به وسیله EntityFarmework
بسم الله الرحمن الرحیم
در پروژه های MVC شما نیاز خواهید پیدا کرد که دیتابیسی که به وسیله Entity Framework (معمولا در روش Code First) تغییر پیدا کرده است را به حالت قبل بازیابی کنید.
به ازای هر بار درخواست تغییر دیتابیس توسط EF یک شماره منحصر به فرد ایجاد می شود که می توانید در دیتابیس خود در تیبل Migration__ این پارت ها را مشاهده کنید.
برای برگرداندن دیتابیس خود به مرحله قبل می توانید به صورت زیر عمل کنید:
Update-Database -Target 2556
2556 شماره حالتی است که قبل از اعمال تغییرات ثبت شده بوده است.
برای رفتن اولین مرحله نیز می توانید به صورت زیر عمل کنید:
Update-Database -Target 0