【问题标题】:Calling Stored procedure EF6 & MVC from Inteface in the repository pattern EXAMPLE从存储库模式中的接口调用存储过程 EF6 和 MVC 示例
【发布时间】:2015-05-02 12:54:06
【问题描述】:

我正在使用 MVC 5 和 Entity Framework 6 数据库优先方法。

我在接口中找不到调用存储过程的示例,返回类型是另一个问题,例如:

我的选择如下

Create Procedure pcdSELECTEMPLOYEE

@Del bit

AS

SELECT * FROM EMPLOYEE WHERE @Del = EMPLOYEE.DEL

GO

Del 是用于在数据库中删除的标志字段,以实现最佳实践。

所以,我的 get all 甚至 get by ID 都涉及到这个:

我从 EF 为员工提供了一个 [GET/SET 类] 具有存储过程的上下文类

我需要 IRepository.cs 和 Repository.cs 方面的帮助,调用 Context.pcdSELECTEMPLOYEEContext.pcdSELECTEMPLOYEEBYID

我在接口中为返回类型或其他设置了哪些对象?

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);
        }

【问题讨论】:

    标签: c# asp.net-mvc entity-framework stored-procedures repository-pattern


    【解决方案1】:

    如果您使用的是存储库模式,那么您将拥有一个 UnitOfWork 类。对存储过程的调用应该放在 UnitOfWork 类中。

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

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

    【讨论】:

    • 请提供一个在接口中调用h复杂类型的例子,谢谢
    • 我没有使用工作单元方法,因为它会导致限制基本上我的 ef6 是工作单元类
    【解决方案2】:

    您可以创建自己的实现 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); } 在数据库级别进行过滤

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多