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();
}
}
}

程序的运行如下:

LINQ to SQL 建立实体类的更多相关文章
- LINQ to SQL 建立实体类 (转)
http://www.cnblogs.com/DebugLZQ/archive/2012/11/14/2770449.html 使用LINQ to SQL时,需要首先建立用于映射数据库对象的模型,也就 ...
- 步步学LINQ to SQL:为实体类添加关系【转】
[IT168 专稿]本文详细为你阐述了如何在你的应用程序中实现LINQ to SQL.附件的示例程序包括了这里探讨的所有代码,还提供了一个简单的WPF图形界面程序来显示通过数据绑定返回的结果集. 第一 ...
- 回顾:Linq To SQL语法 - 实体类
第一篇博客,还望各位大神勿喷 小弟在此代码奉上........ 借用NorthWind数据库,实现一个商品展示的小功能.上代码: 添加对Linq的引用 using System.Data.Linq;/ ...
- GG_Model 类库与数据库表对应建立实体类
3.4.GG_Model 类库与数据库表对应建立实体类 我这里不教大家写代码,直接用TT模板自动生成,省去写代码的麻烦. A. 三个文件MysqlDbhelper.ttinclude .mysqlMa ...
- .net 根据匿名类生成实体类,根据datatable生成实体类,根据sql生成实体类
在开发中可能会遇到这几种情况 1.EF或LINQ查询出来的匿名对象在其它地方调用不方便,又懒的手动建实体类 2.通过datatable反射实体需要先建一个类 ,头痛 3.通过SQL语句返回的实体也需要 ...
- powerdesigner 使用技巧 建模工具 导出sql 导出实体类 导出word
显示comment列 Table Properties(表属性)=>Columns(列)=>Customize Columns and Filter(自定义列过滤) 勾上 comment ...
- 使用原生SQL返回实体类具体实现详情
注:可以直接复制粘贴,欢迎提出各种问题,谢谢! 因为网上查询大都是相同的,自己做时发现很多不懂,摸索了很久才弄懂,所以写了这个例子,比较容易看懂吧. 使用原生SQL查询并将结果返回实体中: (1)因为 ...
- 模拟实现MyBatis中通过SQL反射实体类对象功能
话不多说,直接上干货! package cn.test; import java.lang.reflect.Method; import java.sql.Connection; import jav ...
- linq分组求和_实体类和datatable
1.数据分组求合,分别用的实体类以及datatable来分组求合,还有分组求和之后的如何取值 //实体类版本 List<ProgramTimeModel> TotalAllList = G ...
随机推荐
- wireshark的使用
1. 过滤 比如输入www.baidu.com 使用域名过滤条件为 跟踪的过程是: 105和106是dns查询,108和115是dns回应,为什么会有两条,我也不是和清楚 展开106 可以它使用的是U ...
- Fluent-EDEM耦合计算颗粒流动
虽然说Fluent提供了很多方法用于处理颗粒在流体中的运动行为,然而这些方法都有其各自的适用性.DPM适用于稀薄颗粒的情况,欧拉模型.Mixture模型及DDPM模型虽然可以考虑稠密颗粒相,但并不能考 ...
- android中Canvas使用drawBitmap绘制图片
1.主要的绘制图片方法 //Bitmap:图片对象,left:偏移左边的位置,top: 偏移顶部的位置 drawBitmap(Bitmap bitmap, float left, float ...
- LeetCode:Permutations(求全排列)
Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...
- maven 启动忽略test
两种方法 1,--命令 mvn install -Dmaven.test.skip=true 2.pom.xml 文件 在tomcat 下面的pom.xml 文件里面加上如下 <!-- ski ...
- 【开源java游戏框架libgdx专题】-06-使用libgdx自带的日志方法
Application 接口提供了简单的日志记录,并且提供了颗粒度的控制. Gdx.app.log("MyTag", "my informative message&qu ...
- CSS实现背景透明而背景上的文字不透明完美解决
在我们设计制作一些网页的时候可能会用到半透明的效果,首先我们可能会想到用PNG图片处理,当然这是一个不错的办法,唯一的兼容性问题就是ie6 下的BUG,但这也不困难,加上一段js处理就行了.但假如我们 ...
- c# 用正则表达式获取开始和结束字符串中间的值
c# 用正则表达式获取开始和结束字符串中间的值 /// <summary> /// 获得字符串中开始和结束字符串中间得值 /// </summary> /// <para ...
- 第十二章作业 MemoryBugs-master项目优化笔记
作业要求: 下载bug项目:https://github.com/lzyzsd/MemoryBugs,请注意配合使用MemoryMonitor, AllocationTracker以及HeapDump ...
- Android开发手记(23) Notification
有时候,我们需要应用程序在状态内显示一些通知信息,这时我们就需要使用Notification来完成这一工作.也许我们会想到以前经常使用的Toast来通知用户.虽然Notification与Toast都 ...