Entity Framework 学习总结之五:EntityClient
来源:互联网 发布:8进4出音频矩阵 编辑:程序博客网 时间:2024/05/22 03:23
System.Data.EntityClient
EntityClient 提供程序使用存储特定的 ADO.NET 数据提供程序类和映射元数据与实体数据模型进行交互。 EntityClient 首先将对概念性实体执行的操作转换为对物理数据源执行的操作。 该提供程序将从物理数据源返回的结果集转换为概念性实体。
参考MSDN:
EntityConnection、EntityCommand、EntityDataReader使用
为了避免无意使对象(如 System.Data.Common.CommandTrees 和 ObjectContext)与其元数据失去同步,EntityConnection 必须锁定对象的元数据。锁定元数据后,不允许对连接字符串做出任何更改。
下面是锁定元数据的两种方案:
· EntityConnection 实例通过默认的构造函数或接受连接字符串的 EntityConnection(String) 构造函数进行构造。 在任何一种情况下,连接字符串可能在打开连接前进行多次更改。 调用 [M:System.Data.EntityClient.EntityConnection.Open()] 或 [M:System.Data.EntityClient.EntityConnection.GetMetadataWorkspace()] 锁定元数据。
· EntityConnection 实例通过 EntityConnection(MetadataWorkspace, DbConnection) 构造函数进行构造,此构造函数接受 MetadataWorkspace 和 DbConnection。 在这种情况下,元数据在构造时锁定。 不允许对连接字符串做出任何更改。
加载元数据后,EntityConnection 验证概念性模型、存储模型和映射文件是否全部存在。
代码片断:
//string connStr = System.Configuration.ConfigurationManager.ConnectionStrings["CSharpTestEntities"].Conne
//CSharpTestEntities edm = new CSharpTestEntities();
//string connStr = edm.Connection.ConnectionString;
string connStr = "name = CSharpTestEntities"; //这三种方法都可以获取连接字符串
using (EntityConnection conn = new EntityConnection(connStr))
{
string sqlStr = "select value u from CSharpTestEntities.Users as u order by u.UserID desc";
conn.Open();
EntityCommand ecmd = new EntityCommand(sqlStr, conn);
EntityDataReader edr = ecmd.ExecuteReader(CommandBehavior.SequentialAccess);
if (edr.Read())
{
Console.WriteLine(edr["UserID"]); //输出第一条
Console.WriteLine(edr[1]); //如果使用SequentialAccess则需按顺序访问列,否则将抛异常,edr[0]出错。
}
while (edr.Read())
{
Console.WriteLine(edr["UserID"]); //接着从第二条开始
Console.WriteLine(edr[1]);
}
Console.WriteLine(ecmd.ToTraceString());
}
注:EntityCommand继承自DbCommand,所以也包括ExecuteDbDataReader、 ExecuteNonQuery 、 ExecuteReader 、 ExecuteScalar等常用方法。
EntityParameter使用
代码片断:
#region EntityParameter 参数化传递
//string sqlStr = "select value u from CSharpTestEntities.Users as u order by u.UserID desc skip @start limit @end";
//conn.Open();
//EntityCommand ecmd = new EntityCommand(sqlStr, conn);
#region 方法1
EntityParameter p1 = new EntityParameter("start", DbType.Int32);
p1.Value = 2;
EntityParameter p2 = new EntityParameter("end", DbType.Int32);
p2.Value = 8;
ecmd.Parameters.Add(p1);
ecmd.Parameters.Add(p2);
#endregion
#region 方法2
ecmd.Parameters.AddWithValue("start", 0);
ecmd.Parameters.AddWithValue("end", 8);
#endregion
EntityConnectionStringBuilder使用
代码片断:
#region EntityConnectionStringBuilder 创建连接
EntityConnectionStringBuilder esb = new EntityConnectionStringBuilder();
esb.Provider = "System.Data.SqlClient";
esb.Metadata = @"res://*/CSharpTestEF.csdl|res://*/CSharpTestEF.ssdl|res://*/CSharpTestEF.msl";
esb.ProviderConnectionString = @"Data Source=./SQLEXPRESS;Initial Catalog=CSharpTest;Integrated Security=True;MultipleActiveResultSets=True";
EntityConnection econn = new EntityConnection(esb.ConnectionString);
#endregion
补充:
#region CommandBehavior 枚举
/*
需要注意的是:CommandBehavior.SequentialAccess;这个地方。不同的枚举项,对查询会有不同影响。枚举如下:
Default 此查询可能返回多个结果集。在功能上等效于调用 ExecuteReader()。
SingleResult 查询返回一个结果集。
SchemaOnly 查询仅返回列信息。
KeyInfo 此查询返回列和主键信息。
SingleRow 查询应返回一行。
SequentialAccess 提供一种方法,以便 DataReader 处理包含带有大二进制值的列的行。
CloseConnection 在执行该命令时,如果关闭关联的 DataReader 对象,则关联的 Connection 对象也将关闭。
*/
#endregion
- Entity Framework 学习总结之五:EntityClient
- Entity Framework 学习初级篇6--EntityClient
- Entity Framework 学习初级篇6--EntityClient
- Entity Framework学习初级篇6--EntityClient
- Entity Framework --EntityClient
- ADO.NET Entity Framework 学习初级篇6--EntityClient
- Entity Framework 学习初级篇6--EntityClient(转)
- Entity Framework 学习总结
- 再接再厉VS 2008 sp1 + .NET 3.5 sp1(4) - Entity Framework(实体框架)之EntityClient, ObjectQuery
- Entity Framework之查询总结
- Entity Framework 学习总结之二:数据访问区别
- Entity Framework 学习总结之三:架构组成介绍
- Entity Framework 学习总结之四:对象服务介绍使用
- Entity Framework 学习总结之四:对象服务介绍使用
- Entity Framework 学习总结之六:EntitySQL 介绍入门
- Entity Framework 学习总结之七:EntitySQL 基本查询
- Entity Framework 学习总结之二:数据访问区别
- Entity Framework 学习总结之四:对象服务介绍使用
- Entity Framework 学习总结之三:架构组成介绍
- 详解Sql2005 全文索引创建及应用(2)
- Entity Framework 学习总结之四:对象服务介绍使用
- socket网络编程常用的结构及函数小结
- Entity Framework 学习总结之四:对象服务介绍使用
- Entity Framework 学习总结之五:EntityClient
- android:paddingLeft与android:layout_marginLeft的区别
- oracle导入导出命令详解(附数据库每天定时备份脚本)
- windows 下oracle 冷备份脚本
- DBpool连接池的使用与总结
- 苛
- Windows下定时备份Oracle数据库指定用户数据脚本
- oracle定时备份
- oracle 定时备份