• LINQ to SQL 建立实体类


    使用LINQ to SQL时,需要首先建立用于映射数据库对象的模型,也就是实体类。在运行时,LINQ to SQL 根据LINQ表达式或查询运算符生成SQL语句,发送到数据库进行操作。数据库返回后,LINQ to SQL负责将结果转换成实体类对象。

    建立实体类的方法有很多,例如LINQ to SQL设计器,手动编码建立,使用XML文件映射,使用命令行工具SqlMetal生成等。其中最方便的就是LINQ to SQL设计器。

    1.使用LINQ to SQL设计器建立实体类         

    在一个示例用的Demo控制台程序中添加一个“基于服务的数据库”Database1.mdf,建立一张tb_GuestInfo的表。该表的详细如下:

    下面的所有建立方式,都用的这个数据库。

    在项目中添加一个LINQ to SQL类,采用默认的名称DataClasses1.dbml,如下:

     将tb_GuestInfo表拖到界面上,保存。

     OK,编写相关代码如下,实现增删改查:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace LINQ_To_SQL自定义数据库和实体类
    {
        /// <summary>
        /// 实体类的建立___1.VS建立实体类
        /// </summary>
        class Program
        {
            static void Main(string[] args)
            {
                //
                DataClasses1DataContext dc = new DataClasses1DataContext();
                
                //1.查询
                IQueryable<tb_GuestInfo> query = from p in dc.tb_GuestInfo
                                                 where p.Name != "XXX"
                                                 select p;
    
                foreach (var g in query)
                {
                    Console.WriteLine("{0} {1} {2} {3}",g.Id,g.Name,g.Age ,g.Tel );
                }
    
                Console.WriteLine("-----------------");
                Console.ReadKey(false);
                //2.增加一条记录
                tb_GuestInfo gInfo = new tb_GuestInfo() { Id = 9, Name = "M&M", Age = 40, Tel = "135****5555" };
                dc.tb_GuestInfo.InsertOnSubmit(gInfo);
                dc.SubmitChanges();
    
                foreach (var g in query)
                {
                    Console.WriteLine("{0} {1} {2} {3}",g.Id , g.Name, g.Age, g.Tel);
                }
    
                Console.WriteLine("-----------------");
                Console.ReadKey(false);
    
                //3.删除
                var query_itemToDelete = from g in dc.tb_GuestInfo
                                         where g.Name == "M&M"
                                         select g;
                foreach (var g in query_itemToDelete)
                {
                    dc.tb_GuestInfo.DeleteOnSubmit(g);
                }
                dc.SubmitChanges();
    
    
                foreach (var g in query)
                {
                    Console.WriteLine("{0} {1} {2} {3}", g.Id, g.Name, g.Age, g.Tel);
                }
                Console.WriteLine("-----------------");
                Console.ReadKey(false);
    
                //4.修改
                var query_itemToUpdate = from g in dc.tb_GuestInfo
                                         where g.Name.Contains("DebugLZQ")
                                         select g;
    
                foreach (var g in query_itemToUpdate)
                {
                    g.Name = g.Name + "A";
                }
                dc.SubmitChanges();
    
    
                foreach (var g in query)
                {
                    Console.WriteLine("{0} {1} {2} {3}", g.Id, g.Name, g.Age, g.Tel);
                }
    
                Console.WriteLine("-----------------");
                Console.ReadKey(false);
    
            }
        }
    }

    程序运行结果如下:

     2.手动建立实体类                     

    实体类在多数情况下可以通过LINQ to SQL类设计器建立,当然动手建立一个简单的实体类也不是难事,并且可以更好的学习LINQ to SQL的对象模型。数据库依然是前面的示例数据库。

    在项目中添加一个类GuestInfoEntity.cs,如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.Linq.Mapping;
    
    namespace DataContexDemo
    {
        /// <summary>
        /// 手动建立实体类
        /// </summary>
        [Table(Name="tb_GuestInfo")]
        class GuestInfoEntity
        {
            [Column(IsPrimaryKey=true,DbType="Int NOT NULL IDENTITY",IsDbGenerated=true,Name="Id")]
            public int ID { get; set; }
    
            [Column(DbType = "nvarchar(20)", Name = "Name")]
            public string Name{get;set;}
    
            [Column(DbType = "int", Name = "Age")]
            public int Age { get; set; }
    
            [Column(DbType = "nvarchar(20)", Name = "Tel")]
            public string Tel { get; set; }
        }
    }

    编写示例代码,注意需要引入System.Data.Linq.dll:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.Linq;//关注
    
    namespace DataContexDemo
    {
        class Program
        {
            static void Main(string[] args)
            {
                //2.手动建立实体类
                //
                //连接字符串
                string constring = @"Data Source=.\SQLEXPRESS;AttachDbFilename=E:\Visual Studio 2010\LINQ_to_SQL\LINQ_To_SQL自定义数据库和实体类\Database1.mdf;Integrated Security=True;User Instance=True";
    
                DataContext dc = new DataContext(constring);
    
                Table<GuestInfoEntity> tb = dc.GetTable<GuestInfoEntity>();
    
                var query = tb.AsEnumerable();
    
                foreach (var q in query)
                {
                    Console.WriteLine("{0} {1} {2} {3}",q.ID,q.Name,q.Age,q.Tel );
                }
    
                Console.ReadKey();
            }
        }
    }

    程序运行如下:

     3.使用XML映射文件建立实体类                         

     实体类的映射除了使用内联Attribute外,还可以建立一个包含映射信息的XML文件,此文件生成System.Data.Linq.Mapping.XmlMappingSource对象,作为DataContext对象构造方法的参数。

    这个XML文件只有一个根节点---Database元素,用来映射的数据库信息。Database元素包含一个或多个Table元素,用于映射数据库表的信息,Table元素由一个Type元素和多个Column元素(或Association元素)组成。Type元素用来指定实体类,Column元素用来指定列信息,Association元素用来映射数据库关系。

    在项目中添加一个XML文件,采用默认名称XMLFile1.xml,内容如下:

    <?xml version="1.0" encoding="utf-8" ?>
    <Database Name="Database1" xmlns="http://schemas.microsoft.com/linqtosql/mapping/2007"><!--数据库名称可随意;名称空间一定要加上-->
      <Table Name="tb_GuestInfo"><!--数据库中表的名称-->
        <Type Name="LINQtoSQL建立实体类_XML.GuestInfoEntity"><!--太BT了,居然要全名;GuestInfoEntity居然不行-->    
          <Column Name="Id" Member="ID" DbType="Int NOT NULL IDENTITY" IsPrimaryKey="true"/>
          <Column Name="Name" Member="Name" DbType="nvarchar(20)" />
          <Column Name="Age" Member="Age" DbType="int" />
          <Column Name="Tel" Member="Tel" DbType="nvarchar(20)" />
        </Type>
      </Table>
    </Database>

    这个XML文件包含类全部的映射信息,下面建立映射的类GuestInfoEntity.cs:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace LINQtoSQL建立实体类_XML
    {
       public  class GuestInfoEntity
        {       
            public int ID { get; set; }
            
            public string Name { get; set; }
           
            public int Age { get; set; }
            
            public string Tel { get; set; }
        }
    }

    编写示例代码,同样需要引入System.Data.Linq.dll:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.Linq;
    using System.Data.Linq.Mapping;
    using System.IO;//
    
    namespace LINQtoSQL建立实体类_XML
    {
        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";
    
                XmlMappingSource map = XmlMappingSource.FromXml(File.ReadAllText("XMLFile1.xml"));
    
                DataContext dc = new DataContext(constring, map);
    
                Table<GuestInfoEntity> tb = dc.GetTable<GuestInfoEntity>();
    
                var query = tb.AsEnumerable();
    
                foreach (var g in query)
                {
                    Console.WriteLine("{0} {1} {2} {3}",g.ID,g.Name,g.Age,g.Tel );
                }
                Console.ReadKey();
            }
        }
    }

    程序的运行如下:

  • 相关阅读:
    java OA系统 自定义表单 流程审批 电子印章 手写文字识别 电子签名 即时通讯
    flowable 获取当前任务流程图片的输入流
    最新 接口api插件 Swagger3 更新配置详解
    springboot 集成 activiti 流程引擎
    java 在线考试系统源码 springboot 在线教育 视频直播功能 支持手机端
    阿里 Nacos 注册中心 配置启动说明
    springboot 集成外部tomcat war包部署方式
    java 监听 redis 过期事件
    springcloudalibaba 组件版本关系
    java WebSocket 即时通讯配置使用说明
  • 原文地址:https://www.cnblogs.com/DebugLZQ/p/2770449.html
Copyright © 2020-2023  润新知