使用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 建立实体类的更多相关文章

  1. LINQ to SQL 建立实体类 (转)

    http://www.cnblogs.com/DebugLZQ/archive/2012/11/14/2770449.html 使用LINQ to SQL时,需要首先建立用于映射数据库对象的模型,也就 ...

  2. 步步学LINQ to SQL:为实体类添加关系【转】

    [IT168 专稿]本文详细为你阐述了如何在你的应用程序中实现LINQ to SQL.附件的示例程序包括了这里探讨的所有代码,还提供了一个简单的WPF图形界面程序来显示通过数据绑定返回的结果集. 第一 ...

  3. 回顾:Linq To SQL语法 - 实体类

    第一篇博客,还望各位大神勿喷 小弟在此代码奉上........ 借用NorthWind数据库,实现一个商品展示的小功能.上代码: 添加对Linq的引用 using System.Data.Linq;/ ...

  4. GG_Model 类库与数据库表对应建立实体类

    3.4.GG_Model 类库与数据库表对应建立实体类 我这里不教大家写代码,直接用TT模板自动生成,省去写代码的麻烦. A. 三个文件MysqlDbhelper.ttinclude .mysqlMa ...

  5. .net 根据匿名类生成实体类,根据datatable生成实体类,根据sql生成实体类

    在开发中可能会遇到这几种情况 1.EF或LINQ查询出来的匿名对象在其它地方调用不方便,又懒的手动建实体类 2.通过datatable反射实体需要先建一个类 ,头痛 3.通过SQL语句返回的实体也需要 ...

  6. powerdesigner 使用技巧 建模工具 导出sql 导出实体类 导出word

    显示comment列 Table Properties(表属性)=>Columns(列)=>Customize Columns and Filter(自定义列过滤) 勾上 comment ...

  7. 使用原生SQL返回实体类具体实现详情

    注:可以直接复制粘贴,欢迎提出各种问题,谢谢! 因为网上查询大都是相同的,自己做时发现很多不懂,摸索了很久才弄懂,所以写了这个例子,比较容易看懂吧. 使用原生SQL查询并将结果返回实体中: (1)因为 ...

  8. 模拟实现MyBatis中通过SQL反射实体类对象功能

    话不多说,直接上干货! package cn.test; import java.lang.reflect.Method; import java.sql.Connection; import jav ...

  9. linq分组求和_实体类和datatable

    1.数据分组求合,分别用的实体类以及datatable来分组求合,还有分组求和之后的如何取值 //实体类版本 List<ProgramTimeModel> TotalAllList = G ...

随机推荐

  1. 全面剖析XML和JSON

    1.定义介绍 (1).XML定义扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许 ...

  2. ubuntu下安装svn

    Ubuntu下使用SVN SVN作为日常开发中不可缺少的工具,今天终于开始在Ubuntu下使用了. 1.首先需要安装SVN.Ubuntu下的SVN安装十分简单,sudo apt-get install ...

  3. mysql @变量和变量的区别及怎么判断记录唯一性

    DELIMITER// drop PROCEDURE if EXISTS test.express; create PROCEDURE test.express() BEGIN ) into @a f ...

  4. Java 8 Features – The ULTIMATE Guide--reference

    Now, it is time to gather all the major Java 8 features under one reference post for your reading pl ...

  5. yii2 控制器里 action 大小写组合造成的路由问题

    yii1中, 若存在如下控制器 class BindController extends CController { public function actionGetMobilePhone () { ...

  6. NYOJ128前缀式计算

    前缀式计算 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括 ...

  7. 【Python之旅】第六篇(七):开发简易主机批量管理工具

    [Python之旅]第六篇(七):开发简易主机批量管理工具 python 软件开发 Paramiko模块 批量主机管理 摘要: 通过前面对Paramiko模块的学习与使用,以及Python中多线程与多 ...

  8. ASPNET5应用程序启动

    1. 启动类 在asp.net5当中,Startup类提供应用程序的入口,对所有应用程序是必须的.争对特定环境的配置的starup class和方法也是有可能的, 但是,不管怎样, 一个Startup ...

  9. WMI使用集锦

    转载:http://singlepine.cnblogs.com/articles/299457.html 1.WMI简介 WMI是英文Windows Management Instrumentati ...

  10. 分页技术之GridView控件

    GridView控件实现分页技术 第一步:设置GridView控件的属性,跟分页相关的属性设置如下: AllowPaging="true":允许分页, PageSize=" ...