2016-10-16 7 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? Хранимая процедура IS, установленный в EF.

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

Смежные вопросы