Persons { get; set; }
}
}
Endi AdventureWorks2012 DBdagi Person.Person jadvaliga mos Persons ob’ekti bilan ishlash mumkin. Barcha xodimlar ro’yxatini aniqlash (namuna):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GetPerson
{
class Program
{
static void Main(string[] args)
{
using (PersonContext db = new PersonContext())
{
foreach (Person u in db.Persons)
Console.WriteLine("{0}. {1} {2}", u.BusinessEntityID, u.LastName, u.FirstName);
}
Console.ReadKey();
}
}
}
Code First va EF Power Tools
Yuqorida keltirib o’tilgan texnologiya bilan bir qatorda Microsoft kompaniyasi bizga ushbu jarayonlarni avtomatlashtirish imkonini beradigan instrumentni taklif qiladi. Ushbu instrument EF Power Tools deb nomlanadi.
EF Power Tools orqali Visual Studio ga mos so’zlash amalga oshiriladi. Ushbu sozlashni Entity Framework Power Tools dan o’qib olishingiz mumkin. Entity Framework Power Tools faqatgina Visual Studio ning to’liq versiyalarida ishlaydi.
Agar sizda Visual Studio ning to’liq versiyasi o’rnatilgan bo’lsa, Solution Explorer (Обозреватель решений) oynasida loyiha nomida sichqonchani o’ng tugmasi bosilganda, kontekstli meyuda Entity Framework qismi hosil bo’lishi lozim:
Ushbu menyudan Entity Framework –> Reverse Engineer Code First ni tanlaymiz. Natijada bizda DBga ulanish muloqot oynasi taqdim etiladi:
Avvalgi bo’limda keltirilgan DBni tanlash lozim. Shundan so’ng loyihada Models papkasi hosil qilinadi. Ushbu papkada barcha hosi qilingan klasslar mavjud. DBdagi har bir jadvalga mos klasslar va ularga mos ma’lumotlar konteksti klassi ushbu papkada joylashgan:
Bizning DB da faqat bitta Users jadvali mavjud bo’lganligi sababli,avtomatik tarzda User klassi generatsiya qilingan bo’lib, u jadval tuzilamasini ifodalaydi:
using System;
using System.Collections.Generic;
namespace EFPowerTools.Models
{
public partial class User
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
}
Ma’lumotlar konteksti klassi userstoredbContext esa quyidagi mazmunga ega:
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using EFPowerTools.Models.Mapping;
namespace EFPowerTools.Models
{
public partial class userstoredbContext : DbContext
{
static userstoredbContext()
{
Database.SetInitializer(null);
}
public userstoredbContext()
: base("Name=userstoredbContext")
{
}
public DbSet Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new UserMap());
}
}
}
Ushbu klassda ikkita konstruktor mavjud. Static konstruktor orqali ma’lumotlarni boshlangích inistiliazatsiya qilish amalga oshiriladi. Bizning xolda u hech qanday amal bajarmaydi. Standart konstruktor orqali bosh klassga (DbContext) murojaat qilinib, unga DB bilan ulanish satri base("Name=userstoredbContext") parametr sifatida ulanadi.
Users jadvali bilan ishlash uchun ma’lumotlar kontekstida public DbSet Users { get; set; } xususiyati e’lan qilingan.
OnModelCreating metodida model hosil qilish uchun amallar bajariladi.Bizning holda UserMap klassi yordamida klasslar va DB o'rtasida aloqa shakllantiriladi.
UserMap klassi jadval ustunlari va klass xususiyatlari o'rtasida moslikni amalga oshiradi:
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;
namespace EFPowerTools.Models.Mapping
{
public class UserMap : EntityTypeConfiguration
{
public UserMap()
{
// Primary Key
this.HasKey(t => t.Id);
// Properties
this.Property(t => t.Name)
.IsRequired()
.HasMaxLength(50);
// Table & Column Mappings
this.ToTable("Users");
this.Property(t => t.Id).HasColumnName("Id");
this.Property(t => t.Name).HasColumnName("Name");
this.Property(t => t.Age).HasColumnName("Age");
}
}
}
Dasturdagi boshqa amallarni Code First yondashuviga o’xshash tarzda amalga oshirish mumkin. Biz jadvalga yangi User ob’ektini qo’shib qo’ymoqchi bo’lsak, quyidagi koddan foydalanamiz:
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using EFPowerTools.Models.Mapping;
namespace EFPowerTools.Models
{
public partial class userstoredbContext : DbContext
{
static userstoredbContext()
{
Database.SetInitializer(null);
}
public userstoredbContext()
: base("Name=userstoredbContext")
{
}
public DbSet Users { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new UserMap());
}
}
}
Real hayotda DB murakkab tuzilmaga ega bo’ladi. Shuning uchun generatsiya qilinayotgan klasslar User klassidan murakkab bo’ladi. Ammo, ushbu misolda DBdagi ba’zi jadvallarga mos klasslarni avtomatik hosil qilishimiz mumkin.
Database First
Database First yondashuvi Entity Framework birinchi bor yaratilgan vaqtda taqdim qilingan edi. Ushbu yondashuv ko’p jihatdan Model First ga o’xshash bo’lib, DB tayyor bo’lgan holda ishlatiladi.
Entity Framework muayyan DBdagi ma’lumotlar bilan ishlashi uchun tizimda mos provayder o’rnatilgan bo’lishi lozim. Visual Studio da MS SQL Server ob’ektlari bilan ishlash uchun barcha zaruriy infratuzilmalar o’rnatilgan. MySQL, Oracle va boshqa turdagi DBlar uchun mos provayderlarni o’rnatish lozim. Eng keng tarqalgan DB provayderlarini ADO.NET Data Providers dan olish mumkin.
Yangi Console Application turidagi loyihani yaratamiz. Uning funksionali avvalgi loyihalarga o’xshash tarzda amalga oshiriladi. Faqat Entity Framework ga yondashuv boshqacha tarzda tashkil qilinadi. Ushbu yondashuv asosida dastur yaratilayotganda DB da zarur ob’ektlar mavjud bo’lishi shart.