LINQ to SQL 数据库与LINQ对象的关系

LINQ的优点是提供了在代码中使用强类型化对象,这些对象还映射到以后的数据库对象上

下面是数据库对象和LINQ对象的映射关系

数据库对象LINQ对象
数据库DataContext
类和集合
视图类和集合
属性
关系嵌套集合
存储过程方法 

左列是数据库,数据库是一个完整的实体--表、视图、触发器、存储过曾构成了数据库

右列是LINQ对象

DataContext对象,他绑定到数据库上,为了与数据库进行必要的交互操作,该对象包含一个连接字符串,并管理所发生的所有事物的处理,还负责记录操作,管理数据的输出。Data对象全面管理与数据库的事务处理。

数据库关系,各个对象之间映射的嵌套集合。

存储过程,会映射为DataContext实例的方法上

在调用一个Linq查询 dc.Products 的时候

查询会被LINQ to SQL 转换成为SQL查询语句,提供给数据库,LINQ to SQL 层通过这个查询从数据库中获得行数据,把返回的数据编程强力型对象集合,便于使用。

DataContext对象

DataContext对象管理所发生的所有事物的处理,并提供操作接口

实例化DataContext对象有三个可选参数(数据名,连接串,另一个DataContext对象)

1.使用ExecuteQuery,查询所有产品集合

public void UsingExecuteQuery()
      {
          // using ExecuteQuery
          //获得一个DataContext对象,注意他使用的是DataContext
          DataContext dc = new DataContext(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ToString());
          //执行一个明文查询,并返回一个集合,注意泛型的使用
          IEnumerable<Products> myProducts = dc.ExecuteQuery<Products>("SELECT * FROM PRODUCTS", "");
          //便利集合
          foreach (Products item in myProducts)
          {
              Response.Write(item.ProductID + " | " + item.ProductName + "<br />");
          }

      }

如果想要添加参数的查询可以使用以下占位符的形式

IEnumerable<Products> myProducts = dc.ExecuteQuery<Products>("SELECT * FROM PRODUCTS WHERE UnitsInStock > {0}", 50);

2.Connection 属性 返回一个 System.Data.SqlClient.SqlConnection实例

public void Connection()
        {
            //注意这里使用的是NorthwindDataContext对象
            NorthwindDataContext dc = new NorthwindDataContext();
            Response.Write(dc.Connection.ConnectionString);
        }

3.Transaction 属性

如果有一个可以使用的Ado.net 事物,就可以使用Transaction 属性把这个事务处理赋予DataContext对象实例。 还可以像下面是用 TransactionScope 实现事务,如果数据库操作失败,就回退所有操作,返回最初状态

public void Transaction()
        {
            NorthwindDataContext dc = new NorthwindDataContext();

            using (TransactionScope myScope = new TransactionScope())
            {
                //新建产品
                Products p1 = new Products() { ProductName = "Bill's Product" };
                //插入这个产品,并且获得插入后的p1信息
                dc.Products.InsertOnSubmit(p1);

                Products p2 = new Products() { ProductName = "Another Product" };
                dc.Products.InsertOnSubmit(p2);

                try
                {
                    dc.SubmitChanges();
                    //返回刚刚插入数据的ID值
                    Response.Write(p1.ProductID + "<br />");
                    Response.Write(p2.ProductID + "<br />");
                }
                catch (Exception ex)
                {
                    Response.Write(ex.ToString());
                }
                //指示操作以完成
                myScope.Complete();
            }

4.DataContext 的方法和属性

方法:

 

 名称说明
公共方法CreateDatabase在服务器上创建数据库。
受保护的方法CreateMethodCallQuery(OfTResult)基础结构。执行与指定的 CLR 方法相关联的表值数据库函数。
公共方法DatabaseExists确定是否可以打开关联数据库。
公共方法DeleteDatabase删除关联数据库。
公共方法Dispose释放由 DataContext 使用的所有资源。
受保护的方法Dispose(Boolean)释放由 DataContext 使用的资源。
公共方法Equals(Object)确定指定的 Object 是否等于当前的Object。 (继承自Object。)
公共方法ExecuteCommand直接对数据库执行 SQL 命令。
受保护的方法ExecuteDynamicDelete在删除重写方法中调用,以向 LINQ to SQL 重新委托生成和执行删除操作的动态 SQL 的任务。
受保护的方法ExecuteDynamicInsert在插入重写方法中调用,以向 LINQ to SQL 重新委托生成和执行插入操作的动态 SQL 的任务。
受保护的方法ExecuteDynamicUpdate在更新重写方法中调用,以向 LINQ to SQL 重新委托生成和执行更新操作的动态 SQL 的任务。
受保护的方法ExecuteMethodCall基础结构。执行数据库存储过程或与指定的 CLR 方法关联的标量函数。
公共方法ExecuteQuery(Type, String,Object())直接对数据库执行 SQL 查询。
公共方法ExecuteQuery(OfTResult)(String,Object())直接对数据库执行 SQL 查询并返回对象。
受保护的方法Finalize允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自Object。)
公共方法GetChangeSet提供对由 DataContext 跟踪的已修改对象的访问。
公共方法GetCommand提供有关由 LINQ to SQL 生成的 SQL 命令的信息。
公共方法GetHashCode用作特定类型的哈希函数。 (继承自Object。)
公共方法GetTable(Type)返回特定类型的对象的集合,其中类型由type 参数定义。
公共方法GetTable(OfTEntity)返回特定类型的对象的集合,其中类型由TEntity 参数定义。
公共方法GetType获取当前实例的Type。 (继承自Object。)
受保护的方法MemberwiseClone创建当前 Object 的浅表副本。 (继承自Object。)
公共方法Refresh(RefreshMode, IEnumerable)按照指定模式刷新实体对象的集合。
公共方法Refresh(RefreshMode, Object)按照指定模式刷新实体对象。
公共方法Refresh(RefreshMode,Object())按照指定模式刷新实体对象的数组。
公共方法SubmitChanges计算要插入、更新或删除的已修改对象的集,并执行相应命令以实现对数据库的更改。
公共方法SubmitChanges(ConflictMode)将对检索到的对象所做的更改发送到基础数据库,并指定提交失败时要采取的操作。
公共方法ToString返回表示当前对象的字符串。 (继承自Object。)
公共方法Translate(DbDataReader)将现有 DbDataReader 转换为对象。
公共方法Translate(Type, DbDataReader)将现有 DbDataReader 转换为对象。
公共方法Translate(OfTResult)(DbDataReader)将现有 DbDataReader 转换为对象。

 属性:

 名称说明
公共属性ChangeConflicts返回调用 SubmitChanges 时导致并发冲突的对象的集合。
公共属性CommandTimeout增大查询的超时期限,如果不增大则会在默认超时期限间出现超时。
公共属性Connection返回由框架使用的连接。
公共属性DeferredLoadingEnabled指定是否延迟加载一对多关系或一对一关系。
公共属性LoadOptions获取或设置与此DataContext 关联的DataLoadOptions。
公共属性Log指定要写入 SQL 查询或命令的目标。
公共属性Mapping返回映射所基于的MetaModel。
公共属性ObjectTrackingEnabled指示框架跟踪此DataContext 的原始值和对象标识。
公共属性Transaction为 .NET Framework 设置要用于访问数据库的本地事务。

Table<TEntity> 对象

Table<TEntity>对象表示在数据库中操作的表,数据库中的表都会表示成Table<TEntity>的实例,比如之前的Product可以表示成Table<Product>,有许多方法是可以用于Table<TEntity>对象,其中一些如下:

 名称说明
公共方法Attach(TEntity)如果执行开放式并发检查时需要原始值,请将已断开连接或“已分离”的实体附加到新的DataContext。
公共方法Attach(TEntity, Boolean)以修改或未修改状态将实体附加到DataContext。
公共方法Attach(TEntity, TEntity)通过指定实体及其原始状态,以修改或未修改状态将实体附加到DataContext。
公共方法AttachAll(OfTSubEntity)(IEnumerable(OfTSubEntity))以修改或未修改状态将集合的所有实体附加到DataContext。
公共方法AttachAll(OfTSubEntity)(IEnumerable(OfTSubEntity), Boolean)以修改或未修改状态将集合的所有实体附加到DataContext。
公共方法DeleteAllOnSubmit(OfTSubEntity)将集合中的所有实体置于pending delete 状态。
公共方法DeleteOnSubmit将此表中的实体置为pending delete 状态。
公共方法Equals(Object)确定指定的 Object 是否等于当前的Object。 (继承自Object。)
受保护的方法Finalize允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自Object。)
公共方法GetEnumerator获取此集合的枚举数。
公共方法GetHashCode用作特定类型的哈希函数。 (继承自Object。)
公共方法GetModifiedMembers返回包含其当前和原始值的已修改成员的数组。
公共方法GetNewBindingList创建用于绑定到数据源的新列表。
公共方法GetOriginalEntityState返回包含实体的原始状态的实例。
公共方法GetType获取当前实例的Type。 (继承自Object。)
公共方法InsertAllOnSubmit(OfTSubEntity)将集合中所有处于pending insert 状态的实体添加到DataContext。
公共方法InsertOnSubmit将处于 pending insert 状态的实体添加到此 Table(OfTEntity)。
受保护的方法MemberwiseClone创建当前 Object 的浅表副本。 (继承自Object。)
公共方法ToString返回表示表的字符串。 (重写Object.ToString。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值