پوشه Models و پوشه Cuntext و فایل DatabaseContext.cs
using Microsoft.EntityFrameworkCore;
using WebApplication5.Models.Entities;
namespace WebApplication5.Models.Context
{
public class DatabaseContext : DbContext
{
public DatabaseContext()
{
}
public DbSet<Customer> Customers { get; set; }
public DbSet<Product> Products { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Data Source=DESKTOP-3PDBPI3\SQLEXPRESS; Initial Catalog=StoreEf; Integrated Security=True; TrustServerCertificate=True;");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Warranty>().HasKey(p=> p.ProductId);
modelBuilder.Entity<Product>().HasOne(p=> p.Warranty).WithOne(p=> p.Product).HasForeignKey<Warranty>(p=> p.ProductId);
modelBuilder.Entity<Customer>().Property(e => e.Name).HasColumnName("FullName").HasColumnType("nvarchar(50)");
}
}
}
بسیار خوب! بیایید کد شما را قدم به قدم توضیح دهیم:
کتابخانهها و namespaceها
using Microsoft.EntityFrameworkCore;
using WebApplication5.Models.Entities;
namespace WebApplication5.Models.Context
{
Microsoft.EntityFrameworkCore:
این کتابخانه اصلی برای استفاده از Entity Framework Core است که شامل کلاسها و متدهای لازم برای کار با پایگاه دادهها میباشد.
WebApplication5.Models.Entities:
فرض میشود که مدلهای دادهای شما، مانند Customer و Product، در این namespace قرار دارند.
تعریف کلاس DbContext
public class DatabaseContext : DbContext
{
public DatabaseContext()
{
}
public DbSet<Customer> Customers { get; set; }
public DbSet<Product> Products { get; set; }
DatabaseContext:
این کلاس از DbContext به ارث برده است و به عنوان کانتکست پایگاه داده شما عمل میکند.
DbSet<Customer> Customers و DbSet<Product> Products:
این ویژگیها جداول Customers و Products را در پایگاه داده شما نمایندگی میکنند و به شما امکان دسترسی به دادهها را میدهند.
پیکربندی اتصال به پایگاه داده
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(@"Data Source=DESKTOP-3PDBPI3\SQLEXPRESS; Initial Catalog=StoreEf; Integrated Security=True; TrustServerCertificate=True;");
}
OnConfiguring:
این متد برای پیکربندی گزینههای پایگاه داده استفاده میشود.
optionsBuilder.UseSqlServer:
تنظیمات اتصال به SQL Server را مشخص میکند. در اینجا، از SQL Server محلی (SQLEXPRESS) و پایگاه دادهای به نام StoreEf استفاده شده است. Integrated Security=True نشان میدهد که از اعتبارسنجی ویندوز استفاده میشود. TrustServerCertificate=True نیز برای اعتماد به گواهی SSL سرور استفاده شده است.
پیکربندی مدلها
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Warranty>().HasKey(p => p.ProductId);
modelBuilder.Entity<Product>().HasOne(p => p.Warranty).WithOne(p => p.Product).HasForeignKey<Warranty>(p => p.ProductId);
modelBuilder.Entity<Customer>().Property(e => e.Name).HasColumnName("FullName").HasColumnType("nvarchar(50)");
}
OnModelCreating:
این متد برای پیکربندی و سفارشیسازی مدلهای دادهای استفاده میشود.
modelBuilder.Entity<Warranty>().HasKey(p => p.ProductId):
این کد مشخص میکند که کلید اصلی جدول Warranty، ستون ProductId است.
modelBuilder.Entity<Product>().HasOne(p => p.Warranty).WithOne(p => p.Product).HasForeignKey<Warranty>(p => p.ProductId):
این کد یک رابطه یک به یک بین Product و Warranty تعریف میکند، به طوری که Product یک Warranty دارد و Warranty یک Product. کلید خارجی در Warranty، ProductId است.
modelBuilder.Entity<Customer>().Property(e => e.Name).HasColumnName("FullName").HasColumnType("nvarchar(50)"):
این کد نام ستون Name در جدول Customer را به FullName تغییر میدهد و نوع داده آن را به nvarchar(50) تنظیم میکند.
نتیجهگیری
این کد، یک کانتکست پایگاه داده را با استفاده از Entity Framework Core تعریف میکند که شامل جداول Customer، Product، و Warranty است و تنظیمات خاصی برای ارتباطات و پیکربندیها فراهم میکند. با این تنظیمات، شما میتوانید به راحتی با پایگاه داده SQL Server خود ارتباط برقرار کنید و دادهها را مدیریت کنید.
پوشه Models و پوشه Entities و فایل Customer.cs
namespace WebApplication5.Models.Entities
{
public class Customer
{
public long Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string Name { get; set; }
public virtual ICollection<Order> Orders { get; set; }
}
}
بیایید نگاهی به این کد بیندازیم و هر بخش از آن را توضیح دهیم:
Namespace و تعریف کلاس
namespace WebApplication5.Models.Entities
{
public class Customer
{
namespace WebApplication5.Models.Entities:
این بخش نشان میدهد که کلاس Customer در فضای نام WebApplication5.Models.Entities قرار دارد. فضای نامها برای سازماندهی و گروهبندی کلاسها و سایر اعضای برنامه استفاده میشوند.
public class Customer:
این بخش نشان میدهد که یک کلاس عمومی به نام Customer تعریف شده است. کلاسها به عنوان الگوهایی برای ایجاد اشیاء استفاده میشوند و اعضای کلاس (مانند ویژگیها و متدها) را در بر میگیرند.
ویژگیهای کلاس
public long Id { get; set; }
public string UserName { get; set; }
public string Password { get; set; }
public string Name { get; set; }
public virtual ICollection<Order> Orders { get; set; }
public long Id { get; set; }:
این ویژگی، یک شناسه منحصر به فرد (Id) برای هر شیء از کلاس Customer است. نوع داده آن long است و دارای خصوصیات getter و setter است.
public string UserName { get; set; }:
این ویژگی، نام کاربری (UserName) مشتری را نگه میدارد. نوع داده آن string است.
public string Password { get; set; }:
این ویژگی، رمز عبور (Password) مشتری را نگه میدارد. نوع داده آن string است.
public string Name { get; set; }:
این ویژگی، نام کامل (Name) مشتری را نگه میدارد. نوع داده آن string است.
public virtual ICollection<Order> Orders { get; set; }:
این ویژگی، مجموعهای از سفارشات (Orders) مشتری را نگه میدارد. نوع داده آن ICollection<Order> است و به صورت virtual تعریف شده تا از ویژگیهای بارگذاری تنبل (lazy loading) در Entity Framework Core پشتیبانی کند.
نتیجهگیری
این کلاس Customer نمایانگر یک مدل دادهای است که شامل ویژگیهایی برای ذخیره اطلاعات مشتری مانند شناسه، نام کاربری، رمز عبور، نام کامل و مجموعهای از سفارشات است. این مدل برای استفاده در Entity Framework Core طراحی شده است و به شما امکان میدهد تا اطلاعات مشتری را به صورت شیءگرا در کد خود مدیریت کنید و با پایگاه داده تعامل داشته باشید.
پوشه Models و پوشه Entities و فایل Order.cs
namespace WebApplication5.Models.Entities
{
public class Order
{
public long Id { get; set; }
public DateTime CraetDate { get; set; }
public string Address { get; set; }
public virtual Customer Customer { get; set; }
public long CustomerId { get; set; }
public virtual ICollection<OrderDetil> OrderDetils { get; set; }
}
}
بیایید این کد را با هم بررسی کنیم و هر بخش از آن را توضیح دهیم:
Namespace و تعریف کلاس
namespace WebApplication5.Models.Entities
{
public class Order
{
namespace WebApplication5.Models.Entities:
این بخش نشان میدهد که کلاس Order در فضای نام WebApplication5.Models.Entities قرار دارد. فضای نامها برای سازماندهی و گروهبندی کلاسها و سایر اعضای برنامه استفاده میشوند.
public class Order:
این بخش نشان میدهد که یک کلاس عمومی به نام Order تعریف شده است. کلاسها به عنوان الگوهایی برای ایجاد اشیاء استفاده میشوند و اعضای کلاس (مانند ویژگیها و متدها) را در بر میگیرند.
ویژگیهای کلاس
public long Id { get; set; }
public DateTime CraetDate { get; set; }
public string Address { get; set; }
public long Id { get; set; }:
این ویژگی، یک شناسه منحصر به فرد (Id) برای هر شیء از کلاس Order است. نوع داده آن long است و دارای خصوصیات getter و setter است.
public DateTime CraetDate { get; set; }:
این ویژگی، تاریخ ایجاد سفارش (CraetDate) را نگه میدارد. نوع داده آن DateTime است. لطفاً توجه داشته باشید که نام ویژگی اشتباه تایپی دارد و باید به CreateDate تغییر یابد.
public string Address { get; set; }:
این ویژگی، آدرس مشتری برای سفارش (Address) را نگه میدارد. نوع داده آن string است.
روابط و ناوبریها
public virtual Customer Customer { get; set; }
public long CustomerId { get; set; }
public virtual ICollection<OrderDetil> OrderDetils { get; set; }
}
}
public virtual Customer Customer { get; set; }:
این ویژگی یک رابطه ناوبری (navigation property) برای موجودیت Customer است. این ویژگی به شما امکان میدهد تا مستقیماً به شیء Customer مرتبط با این Order دسترسی داشته باشید. virtual به Entity Framework Core اجازه میدهد که بارگذاری تنبل (lazy loading) را پشتیبانی کند.
public long CustomerId { get; set; }:
این ویژگی یک کلید خارجی (CustomerId) است که به Customer مرتبط با این سفارش اشاره میکند. نوع داده آن long است و ارتباط بین Order و Customer را برقرار میکند.
public virtual ICollection<OrderDetil> OrderDetils { get; set; }:
این ویژگی یک مجموعه ناوبری (navigation property) برای موجودیتهای OrderDetil است. این ویژگی به شما امکان میدهد تا به مجموعهای از جزئیات سفارش (order details) دسترسی داشته باشید که با این سفارش مرتبط هستند. ICollection<OrderDetil> نوع داده مجموعهای است که برای نگهداری چندین شیء OrderDetil استفاده میشود.
نتیجهگیری
این کلاس Order نمایانگر یک مدل دادهای برای یک سفارش است که شامل ویژگیهایی مانند شناسه، تاریخ ایجاد، آدرس، و روابط با موجودیتهای Customer و OrderDetil است. این مدل برای استفاده در Entity Framework Core طراحی شده است و به شما امکان میدهد تا اطلاعات سفارشات را به صورت شیءگرا در کد خود مدیریت کنید و با پایگاه داده تعامل داشته باشید.
پوشه Models و پوشه Entities و فایل OrderDetil.cs
namespace WebApplication5.Models.Entities
{
public class OrderDetil
{
public long Id { get; set; }
public int Count { get; set; }
public virtual Order Order { get; set; }
public long OrderId { get; set; }
public virtual Product Product { get; set; }
public long ProductId { get; set; }
}
}
بیایید این کد را با هم بررسی کنیم و هر بخش از آن را توضیح دهیم:
Namespace و تعریف کلاس
namespace WebApplication5.Models.Entities
{
public class OrderDetil
{
namespace WebApplication5.Models.Entities:
این بخش نشان میدهد که کلاس OrderDetil در فضای نام WebApplication5.Models.Entities قرار دارد. فضای نامها برای سازماندهی و گروهبندی کلاسها و سایر اعضای برنامه استفاده میشوند.
public class OrderDetil:
این بخش نشان میدهد که یک کلاس عمومی به نام OrderDetil تعریف شده است. کلاسها به عنوان الگوهایی برای ایجاد اشیاء استفاده میشوند و اعضای کلاس (مانند ویژگیها و متدها) را در بر میگیرند.
ویژگیهای کلاس
public long Id { get; set; }
public int Count { get; set; }
public long Id { get; set; }:
این ویژگی، یک شناسه منحصر به فرد (Id) برای هر شیء از کلاس OrderDetil است. نوع داده آن long است و دارای خصوصیات getter و setter است.
public int Count { get; set; }:
این ویژگی، تعداد آیتمهای موجود در جزئیات سفارش (Count) را نگه میدارد. نوع داده آن int است.
روابط و ناوبریها
public virtual Order Order { get; set; }
public long OrderId { get; set; }
public virtual Product Product { get; set; }
public long ProductId { get; set; }
}
}
public virtual Order Order { get; set; }:
این ویژگی یک رابطه ناوبری (navigation property) برای موجودیت Order است. این ویژگی به شما امکان میدهد تا مستقیماً به شیء Order مرتبط با این OrderDetil دسترسی داشته باشید. virtual به Entity Framework Core اجازه میدهد که بارگذاری تنبل (lazy loading) را پشتیبانی کند.
public long OrderId { get; set; }:
این ویژگی یک کلید خارجی (OrderId) است که به سفارش مرتبط با این جزئیات سفارش اشاره میکند. نوع داده آن long است و ارتباط بین OrderDetil و Order را برقرار میکند.
public virtual Product Product { get; set; }:
این ویژگی یک رابطه ناوبری برای موجودیت Product است. این ویژگی به شما امکان میدهد تا مستقیماً به شیء Product مرتبط با این OrderDetil دسترسی داشته باشید.
public long ProductId { get; set; }:
این ویژگی یک کلید خارجی (ProductId) است که به محصول مرتبط با این جزئیات سفارش اشاره میکند. نوع داده آن long است و ارتباط بین OrderDetil و Product را برقرار میکند.
نتیجهگیری
این کلاس OrderDetil نمایانگر یک مدل دادهای برای جزئیات سفارش است که شامل ویژگیهایی مانند شناسه، تعداد آیتمها، و روابط با موجودیتهای Order و Product است. این مدل برای استفاده در Entity Framework Core طراحی شده است و به شما امکان میدهد تا اطلاعات جزئیات سفارشات را به صورت شیءگرا در کد خود مدیریت کنید و با پایگاه داده تعامل داشته باشید.
پوشه Models و پوشه Entities و فایل Product.cs
namespace WebApplication5.Models.Entities
{
public class Product
{
internal object warranty;
public long Id { get; set; }
public string Images { get; set; }
public string Name { get; set; }
public string Brand { get; set; }
public int Price { get; set; }
public float Ram { get; set; }
public OStype OS { get; set; }
public string Network { get; set; }
public int Inventory { get; set; }
public virtual ICollection<OrderDetil> OrderDetils { get; set; }
public Warranty Warranty { get; set; }
}
public enum OStype
{
IOS=0,
Androide=1,
WindowsPhone=2
}
}
بیایید کد کلاس Product و OStype را به طور کامل بررسی کنیم و هر بخش از آن را توضیح دهیم.
Namespace و تعریف کلاس
namespace WebApplication5.Models.Entities
{
public class Product
{
namespace WebApplication5.Models.Entities:
این بخش نشان میدهد که کلاس Product در فضای نام WebApplication5.Models.Entities قرار دارد. فضای نامها برای سازماندهی و گروهبندی کلاسها و سایر اعضای برنامه استفاده میشوند.
public class Product:
این بخش نشان میدهد که یک کلاس عمومی به نام Product تعریف شده است. کلاسها به عنوان الگوهایی برای ایجاد اشیاء استفاده میشوند و اعضای کلاس (مانند ویژگیها و متدها) را در بر میگیرند.
ویژگیها و فیلدهای کلاس
internal object warranty;
public long Id { get; set; }
public string Images { get; set; }
public string Name { get; set; }
public string Brand { get; set; }
public int Price { get; set; }
public float Ram { get; set; }
public OStype OS { get; set; }
public string Network { get; set; }
public int Inventory { get; set; }
public virtual ICollection<OrderDetil> OrderDetils { get; set; }
public Warranty Warranty { get; set; }
}
internal object warranty:
این یک فیلد داخلی است که به عنوان یک شیء warranty تعریف شده است. internal به این معنی است که این فیلد فقط در داخل فضای نام فعلی قابل دسترسی است.
public long Id { get; set; }:
این ویژگی، یک شناسه منحصر به فرد (Id) برای هر شیء از کلاس Product است. نوع داده آن long است.
public string Images { get; set; }:
این ویژگی، تصاویر محصول (Images) را نگه میدارد. نوع داده آن string است.
public string Name { get; set; }:
این ویژگی، نام محصول (Name) را نگه میدارد. نوع داده آن string است.
public string Brand { get; set; }:
این ویژگی، برند محصول (Brand) را نگه میدارد. نوع داده آن string است.
public int Price { get; set; }:
این ویژگی، قیمت محصول (Price) را نگه میدارد. نوع داده آن int است.
public float Ram { get; set; }:
این ویژگی، میزان حافظه رم محصول (Ram) را نگه میدارد. نوع داده آن float است.
public OStype OS { get; set; }:
این ویژگی، سیستم عامل محصول (OS) را نگه میدارد. نوع داده آن یک enum به نام OStype است.
public string Network { get; set; }:
این ویژگی، نوع شبکه محصول (Network) را نگه میدارد. نوع داده آن string است.
public int Inventory { get; set; }:
این ویژگی، موجودی انبار محصول (Inventory) را نگه میدارد. نوع داده آن int است.
public virtual ICollection<OrderDetil> OrderDetils { get; set; }:
این ویژگی یک رابطه ناوبری (navigation property) برای موجودیتهای OrderDetil است. این ویژگی به شما امکان میدهد تا به مجموعهای از جزئیات سفارشات که با این محصول مرتبط هستند، دسترسی داشته باشید. ICollection<OrderDetil> نوع دادهای است که برای نگهداری چندین شیء OrderDetil استفاده میشود.
public Warranty Warranty { get; set; }:
این ویژگی یک رابطه ناوبری برای موجودیت Warranty است که تضمین یا گارانتی محصول را نگهداری میکند.
تعریف Enum
public enum OStype
{
IOS = 0,
Androide = 1,
WindowsPhone = 2
}
}
public enum OStype:
این یک enum عمومی به نام OStype است که نوع سیستمعاملهای مختلف را تعریف میکند.
IOS = 0: نمایانگر iOS با مقدار 0.
Androide = 1: نمایانگر Android با مقدار 1.
WindowsPhone = 2: نمایانگر Windows Phone با مقدار 2.
نتیجهگیری
کلاس Product نمایانگر یک مدل دادهای برای محصولات است که شامل ویژگیهایی مانند شناسه، تصاویر، نام، برند، قیمت، حافظه رم، سیستمعامل، شبکه، موجودی و روابط با موجودیتهای OrderDetil و Warranty است. این مدل برای استفاده در Entity Framework Core طراحی شده است و به شما امکان میدهد تا اطلاعات محصولات را به صورت شیءگرا در کد خود مدیریت کنید و با پایگاه داده تعامل داشته باشید. Enum OStype نیز نوع سیستمعامل محصولات را مشخص میکند.
پوشه Models و پوشه Entities و فایل Warranty.cs
namespace WebApplication5.Models.Entities
{
public class Warranty
{
public Product Product { get; set; }
public long ProductId { get; set; }
public int WarrantyPeriod { get; set; }
}
}