随笔 - 705  文章 - 0  评论 - 1103  阅读 - 138万 

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 其他的方法和属性

方法:

image

属性:

image

Table<TEntity> 对象

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

image

posted on   冯瑞涛  阅读(1075)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示