zoukankan      html  css  js  c++  java
  • 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 2010\LINQ_to_SQL\LINQ_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 2010\LINQ_to_SQL\LINQ_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();
    
            }
        }
    }

    程序中的注释很详细,不再赘述。

    程序的运行结果如下:

     

  • 相关阅读:
    python 生成器与装饰器一篇就够了!!!
    Win10安装node.js,npm,淘宝镜像,cnpm失败的解决方法
    Xshell/CentOs7关闭防火墙命令
    Mybaits_逆向工程生成代码
    WebStrom 使用淘宝镜像
    Redis相关命令
    linux中添加service
    简单直接的 Linux查找进程和杀死进程的方法
    发布Spring boot.jar 项目到服务器之后台启动
    CentOS下mysql常用命令
  • 原文地址:https://www.cnblogs.com/DebugLZQ/p/2772203.html
Copyright © 2011-2022 走看看