Entity Framework 4.1 and Poco 使用存储过程联表查询

一:数据库支持

为了演示本例,我们创建了另外一个简单的示例数据库MiniNW,该数据库来自于ADO.NET Entity Framework Extensions,但在本例中,我们不会使用这个针对EF的扩展框架,因为它对POCO的支持不好,同时它也不支持DbContext,简单的说来就是它目前不支持EF4.1。

MiniNW可以在本示例代码的如下位置获得:

Entity Framework 4.1 and Poco 使用存储过程联表查询

数据库对应关系如下(由于数据库相对简单,所以直接列出数据,从数据可以直观看出两表的关系):

Entity Framework 4.1 and Poco 使用存储过程联表查询

二:生成POCO及DbContext

我们使用Entity Framework Power Tools CTP生成POCO及相关映射,如果你对此不熟悉,可参考本篇《使用Entity Framework和WCF Ria Services开发SilverLight之3:Map》。

三:主表从表数据一起关联查询

数据库中存在存储过程GetCategory:

执行此存储过程的代码如下:

得到的数据如下:

Entity Framework 4.1 and Poco 使用存储过程联表查询

其中,Category所对应Products是延迟加载进来的,如果我们只使用Category,数据引擎就不会查询Products表的数据,但是,只要我们一到Category中查看Products,就会获取如上图这样的Products数据。请根据源码中的两个数据实体理解。

执行存储部分的代码EF为我们生成如下:

延迟加载部分的代码EF为我们生成如下:

三:仅获取主表数据

如果不需要关联表的数据,我们可以像下面这样编码。以下这段代码使用的是和上文一样的存储过程:

如果你对这段代码表示不很理解,请参看此文《使用Entity Framework和WCF Ria Services开发SilverLight之6:查找指定字段》。

获取数据如下:

Entity Framework 4.1 and Poco 使用存储过程联表查询

四:由从表关联主表数据

从表关联主表的存储过程如下:

注意,原始例子所带的存储过程不是这样的,多了这样的语句:

Entity Framework 4.1 and Poco 使用存储过程联表查询

DbContext默认支持实体类型的字段和数据库视图是一个字段名,所以我们去掉了重命名部分。

实现此功能的代码如下:

要注意,主表的数据也是延迟加载的,只有使用到的时候才会被查询。

EF为我们生成的代码如下:

获取的数据如下:

Entity Framework 4.1 and Poco 使用存储过程联表查询


本文转自最课程陆敏技博客园博客,原文链接:http://www.cnblogs.com/luminji/archive/2011/07/04/2096896.html,如需转载请自行联系原作者

上一篇:oracle job 定时执行 存储过程


下一篇:ASCII,Utf8,Unicode编码下的中英文字符大小