2016-10-16 12 views
0

私は基本レベルより少し上のEntity Framework(6)に精通しています。私は本から得たパターンに基づいてシステムを構築しました。私は効果的にすべてのdbコールをきれいに汎用化します。しかし、ストアドプロシージャを呼び出すことには言及せず、私は必要なものをいくつか持っています。私はこのパターンに基づいてそれらをどのように呼び出すべきか正確に分かっています。ここでEntity Framework 6でストアドプロシージャを呼び出すレポジトリパターン

は、それがフェッチするために確立された方法である:だから

public class EFRepository<T> : IRepository<T> where T : class 
{ 
    public EFRepository(DbContext dbContext) 
    { 
     if (dbContext == null) 
      throw new ArgumentNullException("dbContext"); 

     DbContext = dbContext; 
     DbSet = DbContext.Set<T>(); 
    } 

    protected DbContext DbContext { get; set; } 
    protected DbSet<T> DbSet { get; set; } 

    public virtual IQueryable<T> GetAll() 
    { 
     return DbSet; 
    } 

    public virtual IQueryable<T> GetTop50() 
    { 
     return DbSet.Take(50); 
    } 

    public virtual T GetById(int id) 
    { 
     return DbSet.Find(id); 
    } 
} 

、私は質問は、私は、ストアドプロシージャの名前とパラメータ(複数可)を渡し、呼び出しを行うだろうか、あると思いますか?結果はまだDbSetですか?ストアドプロシージャは、EFで確立されたISです。

public virtual ObjectResult<PropertiesContactIsInvolvedIn_Result> PropertiesContactIsInvolvedIn(Nullable<int> contactID) 
{ 
    var contactIDParameter = contactID.HasValue ? 
      new ObjectParameter("ContactID", contactID) : 
      new ObjectParameter("ContactID", typeof(int)); 

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<PropertiesContactIsInvolvedIn_Result>("PropertiesContactIsInvolvedIn", contactIDParameter); 
} 

また、私が言ったように、関係するリポジトリのアプローチがあり、そしてエンティティは次のように表現されています

public IRepository<PropertiesContactIsInvolvedIn_Result> PropertiesContactIsInvolvedIn { get { return GetStandardRepo<PropertiesContactIsInvolvedIn_Result>(); } } 

IRepository<PropertiesContactIsInvolvedIn_Result> PropertiesContactIsInvolvedIn { get; } 

答えて

0

あなたはコンテキスト

にストアドプロシージャを見ることができるはずです
using (var context = new EFRepository()) 
{ 
var ids= context.PropertiesContactIsInvolvedIn(id); 


} 
+0

私はもう少し近づいてきますが、このパターンにはかなりのものがあり、私はEFリポジトリの可用性を得ていません。 – ebick

関連する問題