C#操作LINQ to SQL组件进行数据库建模的基本教程

2019-12-30 11:40:59于丽

程序的运行如下:

C#操作LINQ to SQL组件进行数据库建模的基本教程


用于数据库连接的DataContext对象成员
DataContext类位于System.Data.Linq.dll程序集中的System.Data.Linq名称空间下。在LINQ to SQL中负责实体对象和数据库之间的数据交换及其他数据库操作,还负责把数据库中的数据映射成实体类的实例。

DataContext是LINQ to SQL操作实体类建立后紧接着需要操作的对象。本文总结其常用函数和属性的作用及常用用法,实体类是上一节的GuestInfo.cs类,数据库也采用上一节的数据库Database1.mdb,下面的示例程序对对象和属性按其功能进行了必要的分组,代码中也有详尽的注释。代码如下:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;
using System.IO;
using System.Data.SqlClient;

namespace DataContext对象成员
{
  /// <summary>
  /// 用于数据库连接的DataContext类成员
  /// </summary>
  class Program
  {
    static void Main(string[] args)
    {
      
      //连接字符串
      string constring = @"Data Source=.SQLEXPRESS;AttachDbFilename=E:Visual Studio 2010LINQ_to_SQLLINQ_To_SQL自定义数据库和实体类Database1.mdf;Integrated Security=True;User Instance=True";
      //1.构造函数
      DataContext dc = new DataContext(constring);
      //2.GetTable
      Table<GuestInfoEntity> table = dc.GetTable<GuestInfoEntity>();
      var query = table.AsEnumerable();
      foreach(var g in query)
      {
        Console.WriteLine("{0} {1} {2} {3}",g.ID,g.Name,g.Age,g.Tel );
      }
      Console.WriteLine("-----------------");
      Console.ReadKey();

      string fileName = @"E:Visual Studio 2010LINQ_to_SQLLINQ_To_SQL自定义数据库和实体类Database1.mdf";
      //3.DatabaseExists、DeleteDatabase、CreateDatabase
      if (dc.DatabaseExists())
      {
        Console.WriteLine("数据库文件已经存在.");
        dc.DeleteDatabase();
      }
      dc.CreateDatabase();
      if (dc.DatabaseExists())
      {
        Console.WriteLine("{0} 数据库文件创建成功.",Path.GetFileName(fileName ));
      }
      Console.WriteLine("-----------------");
      Console.ReadKey();
      //4_1.ExecuteCommand 作为LINQ补充直接用SQL指令操作数据库
      dc.ExecuteCommand("insert into tb_GuestInfo(Name,Age,Tel) values({0},{1},{2})","DebugLZQ",25,"198****1336");

      foreach (var r in dc.GetTable<GuestInfoEntity>())
      {
        Console.WriteLine("{0} {1} {2} {3}",r.ID,r.Name,r.Age,r.Tel );
      }
      Console.WriteLine("-----------------");
      Console.ReadKey();
      //4_2.ExecuteQuery 作为LINQ补充直接用SQL指令操作数据库
      var rows= dc.ExecuteQuery<GuestInfoEntity>("select * from tb_GuestInfo");

      foreach (var r in rows)
      {
        Console.WriteLine("{0} {1} {2} {3}", r.ID, r.Name, r.Age, r.Tel);
      }
      Console.WriteLine("-----------------");
      Console.ReadKey();
      //4_3Translate 将DbReader转换为LINQ对象
      string queryString = "select * from tb_GuestInfo";
      SqlConnection connection = new SqlConnection(constring);
      SqlCommand cmd = new SqlCommand(queryString, connection);
      connection.Open();

      var result = dc.Translate<GuestInfoEntity>(cmd.ExecuteReader());//ADO.NET转换LINQ

      foreach (var r in result)
      {
        Console.WriteLine("{0} {1} {2} {3}", r.ID, r.Name, r.Age, r.Tel);
      }
      connection.Close();
      Console.WriteLine("-----------------");
      Console.ReadKey();
      //5.SubmitChanges 应用修改
      var firstrow = (from p in dc.GetTable<GuestInfoEntity>()            
            select p).First();
      firstrow.Name =firstrow.Name +"A";

      dc.SubmitChanges();//应用修改

      foreach (var r in dc.GetTable<GuestInfoEntity>() )
      {
        Console.WriteLine("{0} {1} {2} {3}", r.ID, r.Name, r.Age, r.Tel);
      }
      Console.WriteLine("-----------------");
      Console.ReadKey();
      //6.GetChangeSet方法 返回DataContext对象插入、删除、修改过的对象
      ChangeSet cs = dc.GetChangeSet();
      foreach (var r in cs.Updates )
      {
        GuestInfoEntity t = r as GuestInfoEntity;
        Console.WriteLine("{0} {1} {2} {3}", t.ID,t.Name,t.Age,t.Tel );
      }
      Console.WriteLine("-----------------");
      Console.ReadKey();
      //7.Refresh刷新实体对象
      var row1=(from g in dc.GetTable<GuestInfoEntity>() select g).First();
      row1.Age = row1.Age + 5;
      dc.SubmitChanges();
      dc.Refresh(RefreshMode.OverwriteCurrentValues, row1);//

      foreach (var r in dc.GetTable<GuestInfoEntity>())
      {
        Console.WriteLine("{0} {1} {2} {3}", r.ID, r.Name, r.Age, r.Tel);
      }
      Console.WriteLine("7-----------------");
      Console.ReadKey();
      //ChangeConflicts属性 返回DataContext操作数据库时产生的并发冲突合集

      //Transaction属性 设置或返回DataContext跟其他ADO.NET程序共享的事物对象

      //ObjectTrackingEnabled属性 开启或关闭DataContext实体对象的状态跟踪   
   
      //8.Log属性 返回DataContext产生的SQL命令
      dc.Log = Console.Out;//控制台输出DataContext产生的SQL语句

      foreach (var r in dc.GetTable<GuestInfoEntity>())
      {
        Console.WriteLine("{0} {1} {2} {3}", r.ID, r.Name, r.Age, r.Tel);
      }
      Console.WriteLine("-----------------");
      Console.ReadKey();

    }
  }
}