EF7

2016-03-21 18 views
2
kullanarak Havuz Kalıbı

ASP.Net 5/EF7'yi kullanarak yeni bir web uygulaması üzerinde çalışıyorum.EF7

Ayrıca Deprem Düzeni ile birlikte Entity Framework'ü de düşünüyorum.

Genel depo sınıfımla başa çıkmak için biraz öneri arıyorum. EF7'nin henüz Find() yöntemi bulunmadığından, genel depo sınıfımda GetById (int id) gibi bir yöntemi uygularken bazı zorluklar yaşıyorum. Bunun yerine FirstOrDefault() öğesini kullanabileceğini biliyorum, ancak modelden gerçek 'Id' öğesine erişimim yok.

Bir alternatif bulmama yardım eder misiniz? Saeed

+0

Referans verilebilecek 'TEntity'de bazı ortak özellik/alan var mı? “TEntity” nin neye benzediğini gösterebilir misin? – Nkosi

+0

TEntity, daha sonra depo sınıfına geçtiğimde bir model olacaktır. Bu genel depo sınıfı. bu durumda, TEntity, örn. Kişi. – Xerxes1TheGreat

cevap

1

İşte deneyebileceğiniz bir şeydir

public class Repository<TEntity> : IRepository<TEntity> where TEntity : class 
{ 
    protected readonly PersonDBContext _dbContext; 

    public Repository(PersonDBContext context) 
    { 
     _dbContext = context; 
    } 

    public IEnumerable<TEntity> GetAll() 
    { 
     return _dbContext.Set<TEntity>().ToList(); 
    } 

    public TEntity Get(int? id) 
    { 
     return _dbContext.Set<TEntity>().FirstOrDefault(); 
    } 

    public IEnumerable<TEntity> Find(Expression<Func<TEntity, bool>> predicate) 
    { 
     return _dbContext.Set<TEntity>().Where(predicate); 
    } 

    public void Add(TEntity entity) 
    { 
     _dbContext.Set<TEntity>().Add(entity); 
    } 

    public void Remove(TEntity entity) 
    { 
     _dbContext.Set<TEntity>().Remove(entity); 
    } 
} 

Teşekkür:

Aşağıda benim jenerik depo sınıftır.

Modelinizin gerçek kimliğini bilmediğinize dair yorumunuza dayanarak, aradığınız varlığı almak için Find ile yaptığınız gibi bir ifade kullanın.

public class Repository<TEntity> : IRepository<TEntity> where TEntity : class { 
    //..... 

    public TEntity Get(Expression<Func<TEntity, bool>> predicate) 
    { 
     return _dbContext.Set<TEntity>().FirstOrDefault(predicate); 
    } 

    //..... 
} 
+0

Bu iyi bir yaklaşım, teşekkürler. Ama sizce bu, birçok modele sahip olacağımdan (Veritabanından Kod İlkesi) ve hepsinin bu arayüzden türetilmesi gerektiğine inanıyor mu? – Xerxes1TheGreat

+0

Bu durumda, ifade rotasını kullanabilir ve ilk sonucu alabilirsiniz. Bunu yansıtmak için cevabı düzenleyeceğim. – Nkosi

+0

Tavsiye ettiğiniz için çok teşekkürler. Evet doğru, Find7 için bu tekniği kullandım, çünkü EF7'de gerçekten bulamadı ve GetById() için de aynı metod uygulamasını kullanabileceğimi fark etmedim. Yardımınız için tekrar teşekkürler. – Xerxes1TheGreat

1

Ben genel bir depo oluşturmak açıklar bloguma bir yazı oluşturdunuz.END_PARAGRAPHSTART_PARAGRAPHArtık yerine sadece kalmadan, sizin jenerik arayüzüne başka bir parametre eklemek gerekecek Generic Repository using EntityFramework

adresten kontrol edebilirsiniz Varlık Türü, aynı zamanda Birincil Anahtar tipini de geçebilir ve ayrıca bir temel sınıf kullanabilirsiniz

+0

Teşekkürler arkadaşım, senin fikrin de zeki. Bir göz attım ve notlar aldım. Çok teşekkürler. – Xerxes1TheGreat

İlgili konular