博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LINQ to SQL 建立实体类
阅读量:6327 次
发布时间:2019-06-22

本文共 4946 字,大约阅读时间需要 16 分钟。

原文:

使用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自定义数据库和实体类 { ///  /// 实体类的建立___1.VS建立实体类 ///  class Program { static void Main(string[] args) { // DataClasses1DataContext dc = new DataClasses1DataContext(); //1.查询 IQueryable
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 { ///  /// 手动建立实体类 ///  [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
tb = dc.GetTable
(); 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文件包含类全部的映射信息,下面建立映射的类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
tb = dc.GetTable
(); 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(); } } }

程序的运行如下:

转载地址:http://hbgaa.baihongyu.com/

你可能感兴趣的文章
C# ArcEngine 实现点击要素高亮并弹出其属性
查看>>
初识GO语言——安装Go语言
查看>>
SDK命令行操作
查看>>
基于Bootstrap的DropDownList的JQuery组件的完善版
查看>>
EXTJS学习系列提高篇:第二十四篇(转载)作者殷良胜,ext2.2打造全新功能grid系列--阅增删改篇...
查看>>
Hadoop MapReduce编程 API入门系列之分区和合并(十四)
查看>>
判断二叉树是否平衡、是否完全二叉树、是否二叉排序树
查看>>
并查集的应用之求解无向图中的连接分量个数
查看>>
7个神奇的jQuery 3D插件
查看>>
在线浏览PDF之PDF.JS (附demo)
查看>>
波形捕捉:(3)"捕捉设备"性能
查看>>
AliOS Things lorawanapp应用介绍
查看>>
美国人的网站推广方式千奇百怪
查看>>
java web学习-1
查看>>
用maven+springMVC创建一个项目
查看>>
linux设备驱动第四篇:以oops信息定位代码行为例谈驱动调试方法
查看>>
redis知识点整理
查看>>
Hello World
查看>>
Spring3全注解配置
查看>>
ThreadLocal真会内存泄露?
查看>>