Entity Framework 5引入了表值函数(Table-Valued Functions TVFs)。表值函数的返回类型是一个Table类型,可用在SQL查询语句中。最简单的表值函数,读取客户表的记录,参考如下代码:

CREATE FUNCTION  GetCustomers
return table
AS return ( SELECT * FROM Customer) ;
 

此外,表值函数还可以指定要返回的表的列名和函数参数,请参考下面的代码例子:

 
CREATE FUNCTION  GetCustomer(@customerNo nvarchar(50))

returns table 

AS

RETURN (  select * from  customer where customerNo=@customerNo );

Entity Framework 5的Target是.NET 4.5,所以只有选择Visual Studio 2012才可以编译代码。

打开SQL Server Management Studio,运行下面的SQL表值函数:

CREATE FUNCTION [dbo].[GetStudentGradesForCourse]
(@CourseID INT)
RETURNS TABLE
RETURN
SELECT [EnrollmentID],
[CourseID],
[StudentID],
[Grade]
FROM [dbo].[StudentGrade]
WHERE CourseID = @CourseID

启动Visual Studio 2012,增加一个新项目,添加ADO.NET Entity Data Model。在选择模型内容对话框中,选择从数据库中产生,点击下一步,创建一个新的数据库连接。

在选择数据库对象窗口中,选择存储过程和函数节点,选取它下面的子节点GetStudentGradesForCourse函数,点击完成。

默认的,存储过程和函数的返回值会自动生成一个新复合类型,但是,我们需要的是让它返回一个StudentGrade对象,如上面的函数脚本所表达的。为达到此目的,在模型浏览器窗口中,选择导入的函数,双击GetStudentGradesForCourse函数,在编辑导入的函数对话框中,选择实体,然后选择StudentGrade类型。

在.NET代码中,请参考下面的Linq查询,它会调用表值函数,然后投影到一个新的匿名类型中,代码如下所示

using (var context = new SchoolEntities())
{
var CourseID = 4022;
var Grade = 3.5M; // Return all the best students in the Microeconomics class.
var students = from s in context.GetStudentGradesForCourse(CourseID)
where s.Grade >= Grade
select new
{
s.Person,
s.Course.Title
}; foreach (var result in students)
{
Console.WriteLine(
"Couse: {0}, Student: {1} {2}",
result.Title,
result.Person.FirstName,
result.Person.LastName);
}
}

Entity Framework中,需要手动拖动object(table,function,stored procedure)到实体设计器中,这样会有些不方便。如果想一次性把所选择的object都添加的实体设计器中,可以参考如下的方法。

应用工具 Huagati DBML/EDMX,它可以批量的添加数据库中的表,视图,或是存储过程和函数。

官方的通知里面提到,此产品在今年底(2013.12.31)将停止开发(discontinue)。微软的构建的生态系统既垄断了框架开发的内容,还占据了开发工具领域,第三方的小工具生存的机率是很不容易。

除了微软自己的实体设计器,还有些第三方的实体设计工具,在这里做一个简单介绍。

Devart 的 Entity Designer,地址是 http://www.devart.com/entitydeveloper/,主要特性是支持模型优先和数据库优先的二种开发模式,而且支持框架NHibernate,ADO.NET Entity Framework,LinqConnect,Linq to SQL。

Solution Design的LLBL Gen Pro,地址是http://www.llblgen.com 

3.x的版本才引入的多框架支持,对其它的框架支持可能仅仅是个卖点,它自身框架的(LLBL Gen Pro Framework)已经非常成熟稳定。

LLBL Gen是一个支持多框架的实体设计工具,如NHibernate,Entity Framework,LLBL Gen Pro Framework。

最新文章

  1. 记录Office Add-in开发经验
  2. QQ付费群规则重大变更!特别是这类群!
  3. Yii源码阅读笔记(三十五)
  4. volatile之一--volatile不能保证原子性
  5. ASP.NET 预编译
  6. 13个mysql数据库的实用SQL小技巧
  7. Angular4.0.0正式版发布
  8. 排查程序死循环,死锁的方法 ——pstack
  9. 安全性测试入门:DVWA系列研究(一):Brute Force暴力破解攻击和防御
  10. Linux 查找最大文件
  11. Java面试准备之IO
  12. jconsole 连接 wildfly 10 监控
  13. ABP框架系列之九:(Abp-Session-会话)
  14. 问题1:canvas绘制图片加载不出来
  15. gcc 与 glibc 的关系 glibc版本查看
  16. Go 语言中的方法,接口和嵌入类型
  17. zz 【见闻八卦】《金融时报》年度商业书单:互联网题材占一半
  18. DOM操作之属性和样式操作
  19. linux 编译安装amqp
  20. vim相关命令单独记载

热门文章

  1. 命令行中mysql乱码问题
  2. 【2016.3.30项目技术记录】]VS2010自动生成MFC单文档框架程序的修改:去除属性框,在CViewTree类中添加鼠标单击响应
  3. java内存泄漏
  4. 测试架构图 High Level 产品技术(无事来更新,证明这个博客还是Live的)
  5. redis/php redis扩展 安装
  6. Linux(centeros)安装weblogic10.3.6教程
  7. Linux下安装mysql数据库
  8. oracle在impdp时报ORA-31655和ORA-39154
  9. pthread——pthread_cleanup
  10. Scala.js v0.1 发布,在浏览器直接运行 Scala