eitaa logo
پروژه ASP.Net Core MVC (وب و سی شارپ)
119 دنبال‌کننده
168 عکس
38 ویدیو
376 فایل
❁﷽❁ آموزش 📖 برنامه نویسی ASP.Net Core MVC (وب و سی شارپ) Admin: @alialirezapanahi برنامه نویسی برنامه نویسی سی شارپ eitaa.com/sisharpapp برنامه نویسی وب eitaa.com/aspdatnet ویراستی virasty.com/alialirezapanahi آپارات aparat.com/alialirezapanahi
مشاهده در ایتا
دانلود
برای نصب Entity Framework، می‌توانید از روش‌های مختلفی استفاده کنید. در اینجا دو روش رایج برای نصب Entity Framework Core و Entity Framework 6 را توضیح می‌دهم: نصب Entity Framework Core- با استفاده از .NET CLI: - ابتدا مطمئن شوید که .NET SDK نصب شده است. - سپس دستور زیر را در خط فرمان اجرا کنید: dotnet add package Microsoft.EntityFrameworkCore.SqlServer - این دستور بسته NuGet مربوط به SQL Server را نصب می‌کند. می‌توانید نسخه خاصی را با استفاده از -v مشخص کنید، مثلاً: dotnet add package Microsoft.EntityFrameworkCore.SqlServer -v 6.0.14 - با استفاده از Visual Studio: - از منوی Visual Studio، گزینه Project > Manage NuGet Packages را انتخاب کنید. - در تب Browse، بسته Microsoft.EntityFrameworkCore.SqlServer را جستجو و نصب کنید. نصب Entity Framework 6- با استفاده از Package Manager Console: - از منوی Visual Studio، گزینه Tools > NuGet Package Manager > Package Manager Console را انتخاب کنید. - دستور زیر را در کنسول اجرا کنید: Install-Package EntityFramework - برای نصب نسخه خاصی، از -Version استفاده کنید، مثلاً: Install-Package EntityFramework -Version 6.2.0 - با استفاده از Manage NuGet Packages: - از منوی Visual Studio، گزینه Project > Manage NuGet Packages را انتخاب کنید. - در تب Browse، بسته EntityFramework را جستجو و نصب کنید. این روش‌ها به شما کمک می‌کنند تا Entity Framework را به پروژه خود اضافه کنید و از آن برای دسترسی به داده‌ها استفاده کنید.
4.8M حجم رسانه بالاست
مشاهده در ایتا
اضافه کردن (Insert) Person p1 = new Person() { FirstName = "hasan", LastName = "naseri", Age = 20 }; dB.People.Add(p1); در این بخش، یک شیء جدید از کلاس Person ایجاد کرده و آن را به مجموعه People در پایگاه داده اضافه می‌کنید. انتخاب (Select) var res = dB.People.SingleOrDefault(p => p.PersonID == 4); این کد یک شخص را با PersonID برابر با ۴ از پایگاه داده انتخاب می‌کند. اگر چنین شخصی وجود داشته باشد، آن را در متغیر res ذخیره می‌کند. بروز رسانی (Update) if (res != null) { res.Age = 45; } اگر شخصی با PersonID برابر با ۴ پیدا شود، سن او را به ۴۵ تغییر می‌دهید. حذف (Delete) dB.People.Remove(res); این کد شخص انتخاب شده را از پایگاه داده حذف می‌کند. ذخیره (Save) dB.SaveChanges(); در نهایت، تمام تغییرات انجام شده را در پایگاه داده ذخیره می‌کنید.
اگر همچین پیقامی آمد تیک Do not Show بزنید و دکمه OK را کلیک کنید
MyContacts.zip
حجم: 11M
من دفترچه تلفن را به Entity تغییر دادم
پروژه ASP.Net Core MVC (وب و سی شارپ)
من دفترچه تلفن را به Entity تغییر دادم
فرم اصلی 1. رویداد بارگذاری فرم private void Form1_Load(object sender, EventArgs e) { bindGrid(); DataGridViewButtonColumn editButton = new DataGridViewButtonColumn(); editButton.HeaderText = "ویرایش"; editButton.Text = "ویرایش"; editButton.Name = "editButton"; editButton.FillWeight = 55; editButton.UseColumnTextForButtonValue = true; dgContacts.Columns.Add(editButton); DataGridViewButtonColumn deleteButton = new DataGridViewButtonColumn(); deleteButton.HeaderText = "حذف"; deleteButton.Text = "حذف"; deleteButton.Name = "deleteButton"; deleteButton.FillWeight = 50; deleteButton.UseColumnTextForButtonValue = true; dgContacts.Columns.Add(deleteButton); } این متد هنگام بارگذاری فرم اجرا می‌شود. ابتدا داده‌ها را به گرید بایند می‌کند و سپس دو ستون دکمه برای ویرایش و حذف به گرید اضافه می‌کند. 2. بایند کردن داده‌ها به گرید private void bindGrid() { using (Contact_DBEntities db = new Contact_DBEntities()) { dgContacts.AutoGenerateColumns = false; dgContacts.Columns[0].Visible = false; dgContacts.DataSource = db.MyContacts.ToList(); } } این متد داده‌ها را از دیتابیس می‌خواند و به گرید بایند می‌کند. ستون اول گرید را نیز مخفی می‌کند. 3. رویداد کلیک دکمه تازه‌سازی private void btnRefresh_Click(object sender, EventArgs e) { bindGrid(); } این متد هنگام کلیک بر روی دکمه تازه‌سازی، داده‌ها را مجدداً بایند می‌کند. 4. رویداد کلیک دکمه افزودن مخاطب جدید private void btnNewCantact_Click(object sender, EventArgs e) { frmAddOrEdit frm = new frmAddOrEdit(); frm.ShowDialog(); if (frm.DialogResult == DialogResult.OK) { bindGrid(); } } این متد فرم افزودن یا ویرایش مخاطب را باز می‌کند و پس از افزودن یا ویرایش مخاطب، داده‌ها را مجدداً بایند می‌کند. 5. رویداد تغییر متن جستجو private void txtSearch_TextChanged(object sender, EventArgs e) { using(Contact_DBEntities db = new Contact_DBEntities()) { dgContacts.DataSource = db.MyContacts.Where(c => c.Name.Contains(txtSearch.Text) || c.Family.Contains(txtSearch.Text)).ToList(); } } این متد هنگام تغییر متن جستجو، داده‌های گرید را بر اساس متن جستجو فیلتر می‌کند. 6. رویداد کلیک سلول‌های گرید private void dgContacts_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == dgContacts.Columns["editButton"].Index && e.RowIndex >= 0) { if (dgContacts.CurrentRow != null) { int contactId = int.Parse(dgContacts.CurrentRow.Cells[0].Value.ToString()); frmAddOrEdit frm = new frmAddOrEdit(); frm.contactId = contactId; if (frm.ShowDialog() == DialogResult.OK) { bindGrid(); } } } if (e.ColumnIndex == dgContacts.Columns["deleteButton"].Index && e.RowIndex >= 0) { string name = dgContacts.CurrentRow.Cells[1].Value.ToString(); string family = dgContacts.CurrentRow.Cells[2].Value.ToString(); string fullName = name + " " + family; if (MessageBox.Show($"آیا از حذف {fullName} مطمئن هستید؟ ", "توجه", MessageBoxButtons.YesNo) == DialogResult.Yes) { int contactID = int.Parse(dgContacts.CurrentRow.Cells[0].Value.ToString()); using(Contact_DBEntities db = new Contact_DBEntities()) { MyContact contact = db.MyContacts.Single(c => c.ContactID == contactID); db.MyContacts.Remove(contact); db.SaveChanges(); } bindGrid(); } } } این متد برای مدیریت کلیک بر روی دکمه‌های ویرایش و حذف در گرید استفاده می‌شود. اگر دکمه ویرایش کلیک شود، فرم ویرایش باز می‌شود و اگر دکمه حذف کلیک شود، مخاطب حذف می‌شود.
پروژه ASP.Net Core MVC (وب و سی شارپ)
من دفترچه تلفن را به Entity تغییر دادم
فرم ثبت و ویرایش 1. تعریف کلاس و متغیرها public partial class frmAddOrEdit : Form { Contact_DBEntities db = new Contact_DBEntities(); public int contactId = 0; public frmAddOrEdit() { InitializeComponent(); } } این بخش کلاس فرم را تعریف می‌کند و یک نمونه از دیتابیس و یک متغیر برای شناسه مخاطب ایجاد می‌کند. سازنده فرم نیز کنترل‌های فرم را مقداردهی اولیه می‌کند. 2. رویداد بارگذاری فرم private void frmAddOrEdit_Load(object sender, EventArgs e) { if (contactId == 0) { this.Text = "افزودن شخص جدید"; } else { this.Text = "ویرایش شخص"; MyContact contact = db.MyContacts.Find(contactId); txtName.Text = contact.Name; txtFamily.Text = contact.Family; txtAge.Text = contact.Age.ToString(); txtMobaile.Text = contact.Mobile; txtEmail.Text = contact.Email; txtAddress.Text = contact.Address; btnSubmit.Text = "ویرایش"; } } این متد هنگام بارگذاری فرم اجرا می‌شود. اگر contactId برابر صفر باشد، فرم برای افزودن مخاطب جدید تنظیم می‌شود. در غیر این صورت، اطلاعات مخاطب موجود را برای ویرایش بارگذاری می‌کند. 3. متد اعتبارسنجی ورودی‌ها bool ValidateInputs() { if (txtName.Text == "") { MessageBox.Show("لطفا نام را وارد کنید", "هشدار", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } if (txtFamily.Text == "") { MessageBox.Show("لطفا نام خانوادگی را وارد کنید", "هشدار", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } if (txtAge.Value == 0) { MessageBox.Show("لطفا سن را وارد کنید", "هشدار", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } if (txtMobaile.Text == "") { MessageBox.Show("لطفا موبایل را وارد کنید", "هشدار", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } if (txtEmail.Text == "") { MessageBox.Show("لطفا ایمیل را وارد کنید", "هشدار", MessageBoxButtons.OK, MessageBoxIcon.Error); return false; } return true; } این متد ورودی‌های کاربر را اعتبارسنجی می‌کند و در صورت وجود خطا، پیام‌های مناسب را نمایش می‌دهد. 4. رویداد کلیک دکمه ثبت private void btnSubmit_Click(object sender, EventArgs e) { if (ValidateInputs()) { if (contactId == 0) { MyContact contact = new MyContact(); contact.Name = txtName.Text; contact.Family = txtFamily.Text; contact.Age = (int)txtAge.Value; contact.Mobile = txtMobaile.Text; contact.Email = txtEmail.Text; contact.Address = txtAddress.Text; db.MyContacts.Add(contact); } else { var contact = db.MyContacts.Find(contactId); contact.Name = txtName.Text; contact.Family = txtFamily.Text; contact.Age = (int)txtAge.Value; contact.Mobile = txtMobaile.Text; contact.Email = txtEmail.Text; contact.Address = txtAddress.Text; } db.SaveChanges(); MessageBox.Show("عملیات با موفقیت ثبت شد", "موفقیت", MessageBoxButtons.OK, MessageBoxIcon.Information); DialogResult = DialogResult.OK; } } این متد هنگام کلیک بر روی دکمه ثبت اجرا می‌شود. ابتدا ورودی‌ها را اعتبارسنجی می‌کند و سپس بر اساس مقدار contactId، مخاطب جدیدی ایجاد می‌کند یا مخاطب موجود را ویرایش می‌کند. در نهایت، تغییرات را ذخیره کرده و پیام موفقیت نمایش می‌دهد.
الگوهای طراحی یا Design Patterns، راه‌حل‌های قابل تکرار و اثبات‌شده‌ای برای مشکلات رایج در طراحی نرم‌افزار هستند. این الگوها به شما کمک می‌کنند تا کدهای تمیزتر، قابل نگهداری‌تر و قابل فهم‌تری بنویسید. الگوهای طراحی به سه دسته کلی تقسیم می‌شوند: 1- الگوهای طراحی ایجادی (Creational Patterns): این الگوها به ایجاد اشیاء به شیوه‌ای که مناسب‌ترین و بهینه‌ترین روش باشد، کمک می‌کنند. مثال‌هایی از این الگوها شامل Singleton، Factory Method و Abstract Factory هستند. 2- الگوهای طراحی ساختاری (Structural Patterns): این الگوها به ترکیب کلاس‌ها و اشیاء برای تشکیل ساختارهای بزرگ‌تر و پیچیده‌تر کمک می‌کنند. مثال‌هایی از این الگوها شامل Adapter، Composite و Decorator هستند. 3- الگوهای طراحی رفتاری (Behavioral Patterns): این الگوها به تعاملات و مسئولیت‌های بین اشیاء کمک می‌کنند. مثال‌هایی از این الگوها شامل Observer، Strategy و Command هستند. استفاده از الگوهای طراحی می‌تواند به شما در حل مشکلات متداول در برنامه‌نویسی شیءگرا کمک کند و باعث افزایش کیفیت و قابلیت نگهداری نرم‌افزار شود. ادامه مطالب در این سایت https://developersho.com/blog/what-is-design-pattern
تست واحد یا Unit Testing یک مرحله از تست نرم‌افزار است که در آن بخش‌های کوچک و مجزا از یک برنامه (که به آن‌ها Unit یا واحد گفته می‌شود) به صورت جداگانه تست می‌شوند. هدف از Unit Testing این است که اطمینان حاصل شود که هر بخش کوچک از برنامه به درستی و مطابق با انتظارات عمل می‌کند. مزایای Unit Testing- کاهش باگ‌ها: با تست کردن هر واحد به صورت جداگانه، می‌توان باگ‌ها را در مراحل اولیه توسعه شناسایی و رفع کرد. - کد تمیزتر: نوشتن تست‌های واحد به شما کمک می‌کند تا کدهای خود را بهینه‌تر و قابل نگهداری‌تر کنید. - مستندسازی کد: تست‌های واحد به عنوان مستندات زنده برای کدهای شما عمل می‌کنند و نشان می‌دهند که هر بخش از کد چه کاری انجام می‌دهد. - تسهیل تغییرات: با داشتن تست‌های واحد، می‌توانید با اطمینان بیشتری تغییرات در کدهای خود ایجاد کنید، زیرا می‌دانید که تست‌ها به شما کمک می‌کنند تا مشکلات احتمالی را شناسایی کنید. نحوه انجام Unit Testingتست‌های واحد می‌توانند به صورت دستی یا خودکار انجام شوند، اما بیشتر مواقع از روش خودکار استفاده می‌شود. در روش خودکار، برنامه‌نویس کدهای تست را می‌نویسد و آن‌ها را به پروژه اضافه می‌کند. این کدهای تست به صورت خودکار اجرا می‌شوند و نتایج آن‌ها نشان می‌دهد که آیا کدهای اصلی به درستی کار می‌کنند یا خیر. ابزارهای محبوب برای Unit Testing - xUnit: یک فریم‌ورک محبوب برای تست واحد در زبان‌های مختلف برنامه‌نویسی. - NUnit: یک فریم‌ورک تست واحد برای زبان سی‌شارپ. - JUnit: یک فریم‌ورک تست واحد برای زبان جاوا.
ویژگی‌های پیشرفته سی‌شارپ به شما کمک می‌کنند تا کدهای بهینه‌تر، کارآمدتر و قابل نگهداری‌تری بنویسید. در اینجا چند نمونه از این ویژگی‌ها را معرفی می‌کنم: - Async/Await: این ویژگی‌ها به شما اجازه می‌دهند تا برنامه‌های غیرهمزمان بنویسید که می‌توانند به طور همزمان چندین کار را انجام دهند بدون اینکه رابط کاربری قفل شود. - LINQ (Language Integrated Query): LINQ به شما اجازه می‌دهد تا داده‌ها را از منابع مختلف مانند پایگاه داده‌ها، مجموعه‌ها و XML به صورت یکپارچه و با استفاده از سینتکس مشابه SQL جستجو و دستکاری کنید. - Delegates and Events: Delegates به شما اجازه می‌دهند تا متدها را به عنوان پارامتر به متدهای دیگر ارسال کنید. Events نیز برای مدیریت رویدادها و تعاملات بین اشیاء استفاده می‌شوند. - Generics: Generics به شما اجازه می‌دهند تا کلاس‌ها و متدهایی بنویسید که با انواع مختلف داده‌ها کار کنند بدون اینکه نیاز به تکرار کد باشد. - Reflection: Reflection به شما اجازه می‌دهد تا در زمان اجرا اطلاعاتی درباره انواع و اعضای آن‌ها به دست آورید و حتی آن‌ها را تغییر دهید. - Span and Memory: این ویژگی‌ها به شما کمک می‌کنند تا با داده‌های حافظه به صورت کارآمدتری کار کنید و از تخصیص‌های غیرضروری حافظه جلوگیری کنید. این ویژگی‌ها به شما کمک می‌کنند تا برنامه‌های پیچیده‌تر و بهینه‌تری بنویسید.
اکستنشن متد (Extension Method) در سی‌شارپ یک روش برای اضافه کردن متدهای جدید به نوع‌های موجود بدون نیاز به ایجاد یک کلاس مشتق شده یا تغییر در کد اصلی آن نوع است. این متدها به شما اجازه می‌دهند تا قابلیت‌های جدیدی را به کلاس‌ها اضافه کنید، بدون اینکه نیاز به دستکاری در ساختار اصلی آن‌ها داشته باشید. برای تعریف یک اکستنشن متد، باید یک کلاس استاتیک ایجاد کنید و متدهای استاتیک داخل آن کلاس قرار دهید. اولین پارامتر این متدها باید با کلمه کلیدی this و نوعی که می‌خواهید اکستنشن متد به آن اضافه شود، مشخص شود. به عنوان مثال: public static class StringExtensions { public static bool IsPalindrome(this string str) { int len = str.Length; for (int i = 0; i < len / 2; i++) { if (str[i] != str[len - i - 1]) { return false; } } return true; } } در این مثال، متد IsPalindrome به نوع string اضافه شده است و می‌توان آن را به صورت زیر استفاده کرد: string word = "level"; bool result = word.IsPalindrome(); // نتیجه true خواهد بود
یک مثال دیگر از اکستنشن متد (Extension Method) کلاس MyClass using System; using System.Globalization; namespace ExtensionMethod_Example { public static class MyClass { // هم کلاس static باشد و هم متد .کلاس های static تمام اعضا باید static باشند // کلمه static مجبور نشوم یک نمونه جدید بسازم public static string Tooman(int value) { return value.ToString("#,0 Tooman"); } public static string ToRial(this int value) // کلمه کلیدی this متد را به اکستنشن متد (Extension Method) تبدیل می کند { return value.ToString("#,0 Tooman"); } public static string ToShamsi(this DateTime value) { PersianCalendar pc = new PersianCalendar(); return pc.GetYear(value) + "/" + pc.GetMonth(value).ToString("00") + "/" + pc.GetDayOfMonth(value).ToString("00"); } } } کلاس Program using System; namespace ExtensionMethod_Example { internal class Program { static void Main(string[] args) { int Amount = 25000; Console.WriteLine(Amount.ToString("#,0 Rial")); // کار برد tostring می توانید فرمت نوع نوشتاری را می دهد که #,0 سه رقم سه رقم جدا می کند و در آخر ریال را بنویسید Console.WriteLine(MyClass.Tooman(Amount)); // برای اینکه کد تکراری ننویسیم از متد استفاده می کنیم Console.WriteLine(MyClass.Tooman(741258)); Console.WriteLine(Amount.ToRial()); //متد toRial به عنوان یک اکستنشن متد به type int اضافه شد. ایشون یک متد سربار گزاری شده است Console.WriteLine(222444.ToRial()); Console.WriteLine(DateTime.Now.ToShamsi()); Console.ReadKey(); } } }