0

我正在使用MVC 5和实体框架6数据库优先方法。从存储库模式中的Inteface调用存储过程EF6&MVC示例

我无法找到调用接口和返回类型的存储过程的例子是另一个问题,例如:

我的选择是如下

Create Procedure pcdSELECTEMPLOYEE 

@Del bit 

AS 

SELECT * FROM EMPLOYEE WHERE @Del = EMPLOYEE.DEL 

GO 

德尔使用标志字段用于删除数据库中的最佳做法。

所以,我得到的所有,甚至通过ID获取涉及这样的:

我从EF一个[GET/SET类]有员工 具有存储过程

我需要帮助上下文类与IRepository.cs和Repository.cs调用Context.pcdSELECTEMPLOYEEContext.pcdSELECTEMPLOYEEBYID

我在interphace中设置了什么对象用于返回类型或任何东西?

public interface IRepository<T> 
{ 
    IQueryable<T> GetAll(); 
    // other CRUD methods here... 
} 

请帮助这将是非常赞赏

感谢

实体框架创建以下 公共虚拟

ObjectResult<pcdSelectStaffBID_Result>pcdSelectStaffBID(Nullable<int> iD) 
     { 
      var iDParameter = iD.HasValue ? 
       new ObjectParameter("ID", iD) : 
       new ObjectParameter("ID", typeof(int)); 

      return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<pcdSelectStaffBID_Result>("pcdSelectStaffBID", iDParameter); 
     } 

回答

0

如果使用存储库模式,那么你会有一个UnitOfWork类。对存储过程的调用应放置在UnitOfWork类中。

至于返回类型,当您在实体框架中创建函数导入时,可以选择Employee类作为存储过程返回的集合中每个项目的返回类型。存储过程返回Employees的集合。

如果您的存储过程只返回Employee表中的一部分列,那么您将无法选择Employee类。在这种情况下,实体框架会为您创建一个复杂类型。

+0

请致电H络合物类型的接口,感谢 – user2694368

+0

我不是用工作方式的单元与它会导致限制essentually我EF6的更大的项目的例子我这是单元班 – user2694368

0

您可以创建你自己的,它实现IRepository EFRepository类,并在 GETALL()做这样的 if(T.Gettype()=typeof(Employee)) { _dbContext.SqlQuery<Employee>(sqltext, params).ToArray(); } 您也可以在实体上使用属性不是硬代码:)

  • 我用public IQueryable<T> GetAll(Expression<Func<T, bool>> predicate = null) { return (predicate == null) ? _context.Set<T>() : _context.Set<T>().Where(predicate); }来在数据库级过滤