Entity Framework etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Entity Framework etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

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();

6 Kasım 2017 Pazartesi

Entity Framework Configuration Sınıfı

Giriş
DbContext Sınıfının Configuration alanıdır.

LazyLoadingEnabled
Lazy Load için şu ayarlar yapılır.
context.Configuration.ProxyCreationEnabled = true;
context.Configuration.LazyLoadingEnabled = true;

Entity Framework Database Sınıfı

Giriş
DbContext Sınıfının Database alanıdır.

ExecuteSqlCommand Metodu
Şöyle yaparız.
context.Database.ExecuteSqlCommand("...");
SqlQuery Metodu
Şöyle yaparız.


context.Database.SqlQuery<YourEntity>("...");

17 Ekim 2017 Salı

Entity Framework

Web.config
Dosya ayarları şuna benzer
<entityFramework>
  <providers>
    <provider invariantName="System.Data.SqlClient" type="..." />
 </providers>
</entityFramework>
<connectionStrings> 
  <add name="..." connectionString="..." providerName="System.Data.SqlClient" />

</connectionStrings> 
Provider ile connectionString eşleştirilir.
Model Column
Şöyle belirtilir. DbType Money,Int vs. olabilir.
class Order
{
     [Column(Storage="Price", DbType="Money",Expression="UnitPrice + 1.00")]
     public decimal Price{ get; set }

     [Column(Storage="Qty", DbType="Int"]
     public int Quantity { get; set; }

     [Column(Storage="Total", DbType="Money",Expression="Price * Quantity")]
     public decimal Total { get; set; }
}

Model Key
Entity Framework Key Anostasyonu yazısına taşıdım.

Model Required
Şöyle belirtilir.
public class Bike
{
  [Key] public Guid Id{get; set;}
  [Required, StringLength(999)] public string Color { get; set; }
}
Model Tablo ismi
Şöyle belirtilir.
[Table(Name = "Orders")]
class Order
{
...
}
DbContext
DbContext Sınıfı yazısına taşıdım.