3 Aralık 2017 Pazar

Entity Framework DbContext Sınıfı

Giriş
Kendi context sınıfımızı şöyle yazarız.
namespace MySolution.MyApplication.Contexts
{
    public class MyContext : DbContext
    {
        […]
    }
}
Ayarlar için şöyle bir connectionString eklenir.

<add
    name="MySolution.MyApplication.Contexts.MyContext"
    connectionString="..."
    providerName="System.Data.SqlClient" />
Configuration Alanı
Configuration Sınıfı yazısına taşıdım.

Database Alanı
Database Sınıfı yazısına taşıdım.

First metodu
Belirtilen kritere uyan ilk kaydı döndürür. Event isimli bir sınıfımız olsun. Bu sınıfın Title alanı "title" olan ilk nesneyi şöyle alırız.
context.Events.First(ev => ev.Title == "title").Include(ev => ev.User);
Include metodu
OneToMany ilişkilerde Many listesini doldurur.
Örnek
Event isimli bir sınıfımız ve bu sınıfın User isimli bir listesi olsun.
public class Event 
{
  [ForeignKey("UserID")]
  public virtual User User { get; set; }
}
Event'i bulurken User listesini şöyle doldururuz.
context.Events.First(ev => ev.Title == "title").Include(ev => ev.User);
Örnek
Eğer OneToMany listesini filtrelemek isteseydik şöyle yapardık. Örnekte ExampleEntity1 sınıfının TextEntry alanı var. Bu alanın da LocalizContenst listesi var.
var result = dc.ExampleEntity1.Include(ee =>ee.TextEntry.LocalizedContents)
.Select(x=>new
{
  //Try anonymous or a projection to your model.
  //only retrieve filtered data.
  exampleEntity = x,
  localizedContetnt = x.TextEntry.LocalizedContents.Where(g=>g.Id==YourKey),
}).FirstOrDefault();   
SaveChanges metodu
Açıklaması şöyle.
SaveChanges does different things for entities in different states:
  • Unchanged entities are not touched by SaveChanges. Updates are not sent to the database for entities in the Unchanged state.
  • Added entities are inserted into the database and then become Unchanged when SaveChanges returns.
  • Modified entities are updated in the database and then become Unchanged when SaveChanges returns.
  • Deleted entities are deleted from the database and are then detached from the context.
Kısaca değişiklikleri veritabanına kaydeder.
context.SaveChanges();
SaveChangesAsync metodu
Şöyle yaparız.
await context.SaveChangesAsync();
Set metodu
Şöyle yaparız.
var userId = .... // Obtained elsewhere
using (var context = new DbContext())
{
  var user =
    context.Set<User>()
      .Include(u => u.Person.Employee)
      .Where(u => u.Id == userId)
      .ToList()
      .FirstOrDefault();
}
Where metodu
Elimizde Owner tablosu olsun.
OwnerID   OwnerName  
  1        John   
  2        Marie
  3        Alex
Elimde Pet tablosu olsun.
PetID PetTag Status OwnerID
  1    A341  Active    1  
  2    A342  Inactive  1  
  3    A343  Active    2
  4    A345  Active    2
Sahibi olan ve statüsü Inactive olmayanları seçmek için şu sql!i kullanırız.
select o.*
from dbo.owner o
where not exists(
  select *
  from dbo.pet p
  where p.ownerid=o.ownerid and
    p.status='Inactive'
);
Şöyle yaparız.
owners = context.Owners
    .Where(o => !o.Pets.Any(p => p.Status == "Inactive"))
    .ToList();

Hiç yorum yok:

Yorum Gönder