Я знаком с 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; }
, который меня немного ближе, но у этого шаблона все довольно застегнутое, и я не получаю доступность репозитория EF. – ebick