2012-02-17 222 views
-1

我正在寻找一个很好的示例项目使用存储库模式和存储过程。我花了很多次,我找不到任何使用sp来与存储库模式和数据库通信的好例子。即使是一个普通的CRUD,我仍然会使用SP。存储库模式和存储过程

另外,有没有人有一个例子来执行存储过程中的复杂数据在EF中的代码?
例如,存储过程返回多个数据表? 感谢

+0

在谷歌机器上有很多示例演示存储库模式。另外,你还在问第二个问题,这个问题并不十分清楚。你是什​​么意思*在存储过程中执行复杂的数据到代码EF * – IAbstract 2012-02-17 18:09:04

+0

我找不到任何使用sp与存储库模式进行通信的好例子。即使是一个普通的CRUD,我仍然会使用SP。 – 2012-02-17 18:48:14

回答

3

我无法找到使用SP与 库模式commmunicate任何很好的例子。即使是一个普通的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); 
} 

这是CRUD操作基本界面上Entity坚持类。每个方法实现都会调用单个存储过程来执行操作。如果您需要任何其他操作(例如某些过滤或排序),您将创建新的存储过程并公开调用此存储过程的新操作。

如果这是或不是存储库,可以讨论,但只是SP不会为您提供更多。例如,这部分定义几乎不可能在通用级别上实现:

客户端对象以声明方式构造查询规范,并将它们提交到Repository以满足要求。

您的“查询规范”将始终只有特定于给定存储过程的参数并传递给您的公开操作。您将无法声明性地定义整个查询(除非您将SQL作为参数传递给SP)。

您可以直接通过ADO.NET调用存储过程,也可以在EF中使用函数import或ExecuteStoreQuery/ExecuteStoreCommand。 EF能够执行具有此限制的复杂存储过程:

  • 存储过程仅返回单个结果集。对于多个结果集,您将需要EFExtensions,或者您将不得不等待.NET 4.5将此功能包含在内
  • 存储过程不得返回不同的结果集 - 这意味着结果集的结构必须与每个结果集相同SP执行(没有支点或动态SQL返回不同数量的列)

函数导入具有更少的次要限制。如果遵循这些规则,您将能够为SP返回的每个结果集创建类/复杂类型。

+0

好吧,这意味着我不应该根据您的建议使用来自Repository。不是吗? 我很困惑以及如何使用EF来进行实体映射。这就是为什么我真的想要一个例子。 – 2012-02-17 23:48:48

+0

我没有这么说。如果你需要使用SP,你将永远以这样的结果结束。 – 2012-02-17 23:53:21

+0

我编辑了我以前的答案。 因为您描述的方式只是ADO.Net,这是我目前使用CRUD进行的项目设计。 – 2012-02-17 23:55:32