ulanish satridan foydalansak, ma’lumotlar konteksti klassi konstruktorida parametr ko‘rsatilmasligi ham mumkin.
DBdagi ma’lumotlarni o‘qib olish uchun quyidagi koddan foydalanamiz:
using (UserContext db = new UserContext())
{
var users = db.Users;
foreach (User u in users)
{
Console.WriteLine("{0}.{1} - {2}", u.Id, u.Name, u.Age);
}
}
Code First da nomlar
DB da jadval va uning ustunlarini hosil qilish uchun Entity Framework da nomlarni aniqlashda bir qator kelishuvlar (qoidalar) mavjud. Ushbu qoidalar asosida jadval, ustun, tip nomlari ko‘rsatiladi. Ushbu qoidalardan ba’zilarini ko‘rib chiqamiz.
Tiplarni moslashtirish SQL Server va C# dagi tiplar mosligi:
SQL Server
C#
int
int
bit
bool
char
string
date
DateTime
datetime
DateTime
datetime2
DateTime
decimal
decimal
float
double
money
decimal
nchar
string
ntext
string
numeric
decimal
nvarchar
string
real
float
smallint
short
text
string
tinyint
byte
varchar
string
NULL va NOT NULL Jadvaldagi barcha birlamchi kalitlar NOT NULL kabi aniqlanadi. Uzatma tipiga (string, array) xususiyatlarga mos ustunlar DB da NULL kabi, qiymatli tiplar (DateTime, bool, char, decimal, int, double, float) - NOT NULL kabi aniqlanadi.
Agar xususiyat Nullabletipiga mansub bo‘lsa, u NULL ustuniga mos qo‘yiladi.
Kalitlar Entity Framework da jadvalda birlamchi kalit mavjudligi talab qilinadi. Ushbu kalit orqali ob’ektlar nazorat qilinadi. Entity Frameworkda kalitlar Id yoki [Tip_nomi]Id kabi formatga ega bo‘ladi. Masalan, Post klassda PostId ustuni ushbu vazifani bajaradi.
Kalitlar asosan int yoki GUID tipiga mansub bo‘ladi. Shuningdek, boshqa tipga mansub kalitlarni hosil qilish mumkin.
Jadval va ustun nomlari Entity Framework dagi PluralizationService klassi orqali modelga mos klass va jadval nomlari o‘rtasida moslik o‘rnatiladi. User klassiga mos jadval nomi – Users, Person klassiga mos jadval nomi – Peoplekabi bo‘lishi mumkin.
Jadval ustunlari nomlari klass xususiyatlari nomlariga mos bo‘lishi lozim. Agar bizni jadval va ustun nomlari qanoatlantirmasa, Fluent API yoki annotatsiyalar orqali boshqa mexanizmdan foydalanishimiz mumkin.
Code First avtomatizatsiyasi
Agar DB da jadvallar aniqlangan bo‘lsa, ularga mos klasslarni hosil qilish juda ko‘p amallar va vaqtni talab qilishi mumkin. Ushbu amallar agar jadvallar soni ko‘p bo‘lgan holda amalga oshirib bo‘lmaydi.
Visual Studio 2013 ning SP3 yangilash paketi o‘rnatilgan bo‘lsa, ushbu jarayonni avtomatlashtirish mumkin. Buning uchun loyihaga yangi ADO.NET Entity Data Model elementini qo‘shamiz:
OK tugmasi bosilsa, bizda modelni hosil qilish muloqot oynasi hosil qilinadi. So‘ngra ushbu muloqot oynasidan Code First from database qismini tanlash lozim.
Keyingi qadamda mavjud DBga ulanishni hosil qilishimiz lozim.
Ushbu muloqot oynasidan New Connection tugmasini bosamiz va hosil qilingan oynadan server va DBni tanlash lozim:
Ushbu muloqot oynasida tanlangan serverga ((localdb)\v11.0) ulanish namoyish qilingan. Shuningdek, ushbu muloqot oynasida App.config konfiguratsiya faylida ishlatiladigan ulanish satri nomini ham keltirishimiz mumkin. Uni misol sifatida UserContext ga o‘zgartiramiz:
So‘ngra Next tugmasini bosamiz va keyingi qadamda biz DBdagi ishlashimiz zarur bo‘lgan jadvallarni tanlashimiz lozim.
So‘gra Finish tugmasini bosing. SHundan so‘ng DBdagi jadvallarga mos model klasslari generatsiya qilinadi. Bizning misolda quyidagi klass generatsiya qilinadi:
namespace NewAutoCodeSecond
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.Spatial;
public partial class User
{
public int Id { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }
public int Age { get; set; }
}
}
Shuningdek, App.config faylida ulanish satri hosil qilingan:
Endi loyihamizga ma’lumotlar konteksti klassini shakllantirishiz lozim.
using System;
using System.Collections.Generic;
using System.Data.Entity;
namespace NewAutoCodeSecond
{
class UserContext : DbContext
{
public UserContext()
: base("UserContext")
{ }
public DbSet Users { get; set; }
}
}
Endi biz DB bilan ishlashimiz mumkin:
using System;
namespace NewAutoCodeSecond
{
class Program
{
static void Main(string[] args)
{
using (UserContext db = new UserContext())
{
foreach (User u in db.Users)
Console.WriteLine("{0}.{1} - {2}", u.Id, u.Name, u.Age);
}
Console.ReadKey();
}
}
}
Yuqoridagi texnologiya asosida yana bir misolni ko‘rib chiqamiz: