我正在寻找一个使用存储库模式和存储过程的好示例项目。我花了很多次,我找不到任何使用sp与存储库模式和db进行通信的好例子。即使是普通的CRUD,我仍然会使用SP。
另外,有没有人有一个例子来在存储过程中复杂的数据来编码EF?
例如,存储过程返回多个数据表?
感谢
答案 0 :(得分:3)
我找不到任何使用sp进行通信的好例子 存储库模式。即使是普通的CRUD,我仍然会使用SP。
只需考虑pattern和您的选项 - 您只能使用SP,并且您希望对象负责数据访问。您不需要任何示例项目 - 您只需要思考。
使用存储过程实现存储库时,您将以接口定义的简单DAO(数据访问对象)结束,如:
public interface IEntityDao
{
IEnumerable<Entity> GetAll();
Entity GetByKey(int key);
bool Insert(Entity data);
bool Update(Entity data);
bool Delete(int key);
}
这是Entity
持久化类的CRUD操作的基本界面。每个方法实现都会调用单个存储过程来执行操作。如果您需要任何其他操作(例如某些过滤或排序),您将创建新的存储过程并公开调用此存储过程的新操作。
如果这是或不是存储库,可以讨论,但只是SP不会为您提供更多。例如,这部分定义几乎不可能在通用级别上实现:
客户端对象以声明方式构造查询规范并提交 他们到存储库是为了满足。
您的“查询规范”将始终只是特定于给定存储过程的参数,并传递给您的公开操作。您将无法以声明方式定义整个查询(除非您将SQL作为参数传递给SP)。
您可以直接通过ADO.NET调用存储过程,也可以在EF中使用函数导入或ExecuteStoreQuery
/ ExecuteStoreCommand
。 EF能够执行具有以下限制的复杂存储过程:
功能导入几乎没有什么小的限制。如果遵循这些规则,您将能够为SP返回的每个结果集创建类/复杂类型。