Entity Framework学习中级篇2—存储过程(上)

目前,EF对存储过程的支持并不完善。存在以下问题:

l EF不支持存储过程返回多表联合查询的结果集。

l EF仅支持返回返回某个表的全部字段,以便转换成对应的实体。无法支持返回部分字段的情况。

l 虽然可以正常导入返回标量值的存储过程,但是却没有为我们自动生成相应的实体.cs代码,我们还是无法在代码中直接调用或使用标量存储过程

l EF不能直接支持存储过程中Output类型的参数。

l 其他一些问题。

下面,主要针对如何使用存储过程,以及存储返回实体、表的部分字段这个几个问题,做具体介绍。

l 导入存储过程及返回实体

在VS可视化设计器中,打开实体模型(emdx文件)。然后,鼠标右键点击“Customers”à “添加”à“函数导入”,然后选择“存储过程名称”,并输入函数导入名称,选择返回类型为实体并选择Customers。如下图所示:


之后,点击“确定”。之后,存储过程导入。在代码我们就可以使用改存储过程了。如下代码所示:

[Test]
public void GetEntityBySP()
{
using (var db = new NorthwindEntities())
{
var cst = db.GetCustomerById("ALFKI").FirstOrDefault();
Assert.IsNotNull (cst);
Console.WriteLine("CustomerId:{0},ContactName:{1}", cst.CustomerID, cst.ContactName);
}
}

时间: 2025-01-07 17:54:17

Entity Framework学习中级篇2—存储过程(上)的相关文章

Entity Framework学习中级篇3—存储过程(中)

目前,EF对存储过程的支持并不完善.存在以下问题: l EF不支持存储过程返回多表联合查询的结果集. l EF仅支持返回返回某个表的全部字段,以便转换成对应的实体.无法支持返回部分字段的情况. l 虽然可以正常导入返回标量值的存储过程,但是却没有为我们自动生成相应的实体.cs代码,我们还是无法在代码中直接调用或使用标量存储过程 l EF不能直接支持存储过程中Output类型的参数. l 其他一些问题. 本节,我们将学习如何手动添加/修改存储过程,如何使EF能够支持Output类型的参数. l 添

Entity Framework学习中级篇4—存储过程(下)

在EF中,各个实体的插入.更新和删除也都通过使用存储过程来完成,以便提高点性能.这个类似于数据集.其步骤是:先定义存储过程,然后在VS的可视化设计器,设置存储过程映射即可. 下面,以为Supplier实体映射存储过程为例. 分别建立插入.更新和删除存储过程. InsertSuppliers存储过程定义如下: CREATE PROCEDURE [dbo].[InsertSuppliers] -- Add the parameters for the stored procedure here @C

Entity Framework学习中级篇1—EF支持复杂类型的实现

本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的简单操作. 通常,复杂类型是指那些由几个简单的类型组合而成的类型.比如:一张Customer表,其中有FristName和LastName字段,那么对应的Customer实体类将会有FristName和LastName这两个属性.当我们想把FirstName和LastName合成一个名为CustomerName属性时,此时,如果要在EF中实现这个目的,那么我们就需要用到复杂类型. 目前,由于EF不能显示支持复杂类型,所以我们

Entity Framework学习中级篇5—使EF支持Oracle9i

从Code MSDN上下载下来的EFOracleProvider不支持Oracle9i.但是,目前我所使用的还是Oracle9i.为此,对EFOracleProvider修改了以下,以便使其支持Oracle9i. 下面说说具体修改地方.(红色部分为添加或修改的代码部分) 一,修改EFOracleProvider 1,修改EFOracleProviderManifest.cs类文件, internal const string TokenOracle9i = "9i";//add by

Entity Framework学习初级篇2

Entity Framework 学习初级篇2--ObjectContext.ObjectQuery.ObjectStateEntry.ObjectStateManager类的介绍 本节,简单的介绍EF中的ObjectContext.ObjectQuery.ObjectStateEntry.ObjectStateManager这个几个比较重要的类,它们都位于System.Data.Entity.dll下的System.Data.Objects命名空间下.在后续的章节中,我们经常会用到它们的某些方

Entity Framework学习初级篇1--EF基本概况

最近在学习研究微软的EF,通过这时间的学习研究,感觉这个EF目前来说还不是很完善,半成品.不过,据说在.Net4.0中,微软将推荐使用此框架,并会有所改善.而且,现在基本上所有数据库均提供了对EF的支持.因此,为以后做技术准备可以学习研究以下.但是,我个人觉得就目前来说,在实际项目慎用此框架. 下面简单的介绍以下这个EF. 在.Net Framework SP1微软包含一个实体框架(Entity Framework),此框架可以理解成微软的一个ORM产品.用于支持开发人员通过对概念性应用程序模型

Entity Framework学习高级篇1—改善EF代码的方法(上)

本节,我们将介绍一些改善EF代码的相关方法,如NoTracking,GetObjectByKey, Include等. l MergeOption.NoTracking 当我们只需要读取某些数据而不需要删除.更新的时候,可以指定使用MergeOption.NoTracking的方式来执行只读查询(EF默认的方式是AppendOnly).当指定使用NoTracking来进行只读查询时,与实体相关的引用实体不会被返回,它们会被自动设置为null .因此,使用NoTracking可以提升查询的性能.示

Entity Framework学习初级篇6--EntityClient

System.Data.EntityClient 命名空间是实体框架的.NET Framework数据提供程序.EntityClient 提供程序使用存储特定的ADO.NET数据提供程序类和映射元数据与实体数据模型进行交互.EntityClient首先将对概念性实体执行的操作转换为对物理数据源执行的操作.然后再将物理数据源返回的结果集转换为概念性实体. EntityClient下的类有以下几个: l EntityConnection l EntityCommand l EntityConnect

Entity Framework学习初级篇7--基本操作:增加、更新、删除、事务

本节,直接写通过代码来学习.这些基本操作都比较简单,与这些基本操作相关的内容在之前的1至6节基本介绍完毕. l 增加: 方法1:使用AddToXXX(xxx)方法:实例代码如下: using (var edm = new NorthwindEntities()) { Customers c = new Customers { CustomerID = "c#", City = "成都市", Address = "中国四川省", CompanyNa