《Entity Framework 6 Recipes》中文翻译——第十章EntityFramework存储过程处理(五)...

在存储模型中定义一个自定义函数

问题

  您想在模型中定义一个自定义函数,而不是数据库中的存储过程。

解决方案

  让我们说,你有一个数据库,保持轨道的成员Member和他们所发送的消息Message

  这可能是因为,作为一个入门级程序员,你没有被授予数据库创建存储过程的访问权限。然而,作为明智的和富有成效的,你要来封装查询逻辑用于查找与信息最多的成员进入存储模式过程中的可重复使用的自定义函数。

  要在存储模型中定义自定义函数,做以下步骤:

  1、右键单击.edmx文件,并选择与➤XML(文本)编辑。这将打开的XML编辑器的edmx文件。

  2、添加下列代码到<Schema>元素。这定义了自定义函数。

  

 <Function Name="MembersWithTheMostMessages" IsComposable="false">
          <CommandText>
            select m.*
            from Member m
            join
            (
            select msg.MemberId, count(msg.MessageId) as MessageCount
            from Message msg where DateSend = @datesend
            group by msg.MemberId
            ) temp on m.MemberId = temp.MemberId
            order by temp.MessageCount desc
          </CommandText>
          <Parameter Name="datesend" Type="datetime" />
        </Function>

  3、打开设计界面的edmx文件。右键单击设计图面上,并选择“添加➤函数导入“。在对话框中,选择存储过程名称下拉MembersWithTheMostMessages。在导入的函数的名称”文本框中输入会员TheMostMessages。最后,选择实体作为返回类型,并选择成员作为实体类型。单击“确定”。

  4、使用自定义函数,如下所示:

DateTime today = DateTime.Parse("5/7/2013");
            using (var context = new School5Entities())
            {
                var mem1 = new Member { Name = "Jill Robertson" };
                var mem2 = new Member { Name = "Steven Rhodes" };
                mem1.Messages.Add(new Message
                {
                    DateSend = today,
                    MessageBody = "Hello Jim",
                    Subject = "Hello"
                });
                mem1.Messages.Add(new Message
                {
                    DateSend = today,
                    MessageBody = "Wonderful weather!",
                    Subject = "Weather"
                });
                mem1.Messages.Add(new Message
                {
                    DateSend = today,
                    MessageBody = "Meet me for lunch",
                    Subject = "Lunch plans"
                });
                mem2.Messages.Add(new Message
                {
                    DateSend = today,
                    MessageBody = "Going to class today?",
                    Subject = "What's up?"
                });
                context.Members.Add(mem1);
                context.Members.Add(mem2);
                context.SaveChanges();
            }
            using (var context = new School5Entities())
            {
                Console.WriteLine("Members by message count for {0}",
                                   today.ToShortDateString());
                var members = context.TheMostMessages(today);
                foreach (var member in members)
                {
                    Console.WriteLine("Member: {0}", member.Name);
                }
            }

 

 

  自定义函数与模型定义函数(见第11章)不同,自定义函数定义在存储模型中。这使得自定义函数更像是数据库中的传统存储过程。就像存储模型中定义了一个查询不真正存在于数据库中的“虚拟”表,存储模型中的一个自定义函数就像一个“虚拟”存储过程。在实体框架社区中的一些是指自定义函数作为本机函数。微软文档使用术语“自定义函数”,所以我们将使用这个术语“自定义函数”。
  自定义函数可以帮助在以下情况下:
  •您没有权限创建您需要在数据库中的存储过程。
  •您要单独管理代码和数据库的部署。使用一个或多个自定义函数,可以部署代码,而不需要为数据库部署新的存储过程。
  •在数据库中的现有存储过程中有与您的实体不兼容的参数。使用自定义功能,您可以创建一个抽象层,删除,添加或更改存储过程参数和实体上的属性之间的类型。

转载于:https://www.cnblogs.com/yunxiaguo/p/5707255.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值