作甚?

先说说这个工具是干啥的,我们所做的程序,或多或少需要存储一些数据到数据库,当然直接使用Sql语句也可以,甚至有些情况下就是要使用sql语句,但对于一些基本的增删改查,对每张表都要写查询语句就显得效率低下了,并且查询出来的数据没有映射成对象,我们自己还要去转换一次,显得麻烦。这个时候就有很多很多ORM框架出现了,按我浅薄的理解就是将数据库中的表映射成代码中对象,增删改查都用对象封装起来,用起来就很舒服,当然映射这些工作必须是自动完成的,能够根据数据库的表结构自动生成,今天介绍的SqlMetal.exe就是其中一种。

SqlMetal.exe

这个工具安装了vs就会有,它的路径在

c:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\下,命令很多,功能也很强大,粗糙的用法就是,先有了数据库,然后用这个工具去根据这个数据库生成相应的对象模型代码文件,我们把这些文件包含进我们的程序,就能够对数据库进行操纵了。

sqlmetal /conn:"Server=np:\\.\pipe\LOCALDB#88239602\tsql\query;Database=Northwind;Integrated Security=true" /dbml:../Northwind.dbml

SqlMetal /code:../Northwind.cs /map:../Northwind.map ../Northwind.dbml

第一句命令,是告诉SqlMetal链接字符串/conn:,他会根据这个数据库生成一个dbml文件/dbml:

第二句命令,就是根据这个dbml文件生成类文件和其他文件,我们把生成出来的文件都包含进代码中。

我们发现数据库中有这张表Customers,而程序中也有了一个Customers对象,所以我们来增加一个客户信息

private static Northwind _db = new Northwind(@"Server=np:\\.\pipe\LOCALDB#0FA0957B\tsql\query;Database=Northwind;Integrated Security=true");

    static void Main(string[] args)
{
var customer = new Customers()
{
Address = "KunMing",
City = "YunNan",
CompanyName = "999",
ContactName = "Bob",
ContactTitle = "Owner",
Country = "China",
Fax = "030-0076545",
Phone = "030-0074321",
PostalCode = "12209",
CustomerID = "SIMOC",
}; _db.Customers.InsertOnSubmit(customer);
_db.SubmitChanges();
}

private static Northwind _db = new Northwind(@"Server=np:\\.\pipe\LOCALDB#0FA0957B\tsql\query;Database=Northwind;Integrated Security=true");

    static void Main(string[] args)
{
var customer = _db.Customers.FirstOrDefault(x => x.CompanyName == "999"); if (customer != null)
{
customer.CompanyName = "888";
_db.SubmitChanges();
}
}

private static Northwind _db = new Northwind(@"Server=np:\\.\pipe\LOCALDB#0FA0957B\tsql\query;Database=Northwind;Integrated Security=true");

    static void Main(string[] args)
{
var customer = _db.Customers.FirstOrDefault(x => x.CompanyName == "888"); if (customer != null)
{
_db.Customers.DeleteOnSubmit(customer);
_db.SubmitChanges();
}
}

private static Northwind _db = new Northwind(@"Server=np:\\.\pipe\LOCALDB#0FA0957B\tsql\query;Database=Northwind;Integrated Security=true");

    static void Main(string[] args)
{
var customer = _db.Customers.FirstOrDefault(x => x.CompanyName == "888");
}

视图和存储过程

这些都是简单的操作,给我们节省了很多时间,但LinqToSql用于多表联合查询时,特别是带统计的查询时,效率就会有所下降,为什么呢,一般我们在写linq语句的时候,如下面这种:

var customer = from c in _db.Customers where c.CompanyName == "888" select c;

它是会等待真正使用数据的时候才去查询,如.ToList方法,Count方法的时候,当我们使用LinqToSql的时候,一旦分组统计中使用了.Count方法,那么它就会执行一次查询,试想,如果有很多行需要统计的数据,那么是不是要查询很多次,就网络中的延迟就会导致这个查询效率很低,解决的办法就是使用存储过程or视图。SqlMetal同样可以生成视图和存储过程,我们在数据库中添加简单的视图和存储过程

create view View_custome
as
select * from dbo.Customers
go create proc Proc_GetCustomerById(
@Id nvarchar(100)
)
as
select * from dbo.Customers where CustomerID=@Id
go

然后修改上面的命令为:

sqlmetal /conn:"Server=np:\\.\pipe\LOCALDB#0FA0957B\tsql\query;Database=Northwind;Integrated Security=true" /dbml:../Northwind.dbml  /views /functions /sprocs

重新生成

 var viewResult = _db.View_custome.ToList();

var procResult = _db.Proc_GetCustomerById("ALFKI").FirstOrDefault();

视图和存储过程都能使用啦,是不是觉得很方便。

如果有错误的地方还请指正。

SqlMetal.exe ORM代码生成的更多相关文章

  1. 设置数据库为SINGLE_USER模式,减少锁定时间

    --SQL Server开启READ_COMMITTED_SNAPSHOT ----设置数据库为SINGLE_USER模式,减少锁定时间 ALTER DATABASE ENDV_SOA SET SIN ...

  2. SOS.dll(SOS 调试扩展)

      SecAnnotate.exe(.NET 安全批注器工具) SignTool.exe(签名工具) Sn.exe(强名称工具) SOS.dll(SOS 调试扩展)   SqlMetal.exe(代码 ...

  3. .NET Framework 工具

    您可以使用 .NET Framework 工具轻松创建.部署和管理面向 .NET Framework 的应用程序和组件. 此节中介绍的大部分 .NET Framework 工具将自动随 Visual ...

  4. 使用sqlmetal工具自动生成SQL数据库的Linq类文件

    第一部:找到sqlmetal.exe. 运行cmd. 执行命令 cd C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5 ...

  5. 2014年4月份第3周51Aspx源码发布详情

    WPY净水机网站源码  2014-4-14 [VS2008]源码描述: 实现产品展示,在线留言,信息发布,在线咨询,营销网络地图. 网站基本管理:网站banner管理 管理首页滚动图片信息 网站右下部 ...

  6. myGeneration代码生成器

    转自:http://www.cnblogs.com/leitwolf/archive/2007/07/27/833255.html http://blog.csdn.net/happyhippy/ar ...

  7. sql2000下如何新建并使用dbml

    默认新建的dbml只是支持sql2005及其以上版本. 但是现在是sql2000怎么办?我要是想要用linq to sql 的? 解决方案如下: 1首先打开cmd,在其中cd到sqlmetal.exe ...

  8. WCF技术剖析之十一:异步操作在WCF中的应用(上篇)

    原文:WCF技术剖析之十一:异步操作在WCF中的应用(上篇) 按照操作执行所需的资源类型,我们可以将操作分为CPU绑定型(CPU Bound)操作和I/O绑定型(I/O Bound)操作.对于前者,操 ...

  9. Windows 编程,程序编译使用的命令行工具。

    Windows 编程,程序编译使用的命令行工具. 1.cl.exe文件是Visual C\C++的编译器,它将程序源代码文件编译为obj文件. 2.rc.exe文件是资源编译器.工程项目中的.rc文件 ...

随机推荐

  1. Snap.svg – 现代 Web 开发必备的 JavaScript SVG 库

    SVG 是一种很好的 Web 技术方案,可以用来创建互动,在任何大小的屏幕上都会很好看.与分辨率无关的矢量图形.而这里推荐的 Snap.svg 这个 JavaScript 可以让你像 jQuery 操 ...

  2. 未能加载包“Microsoft SQL Server Data Tools”

    直接在vs2013里的App_Data目录创建数据库,在服务器资源管理器中查看时报错: 未能加载包“Microsoft SQL Server Data Tools” 英文: The 'Microsof ...

  3. Angular+Grunt+Bower+Karma+Protractor (Atom)

    1. 配置bower 1.安装bower npm install -g bower 2.创建.bowerrc文件 { "directory": "src/bower&qu ...

  4. SharePoint 2013 网站搜索规则的使用示例

    前言 SharePoint 2013搜索中,有一个非常好用的细化搜索结果的功能,就是“查询规则”.可以通过对于某些特定查询时,起到细化显示结果的作用.下面,我们简单的介绍一下该功能的使用和效果. 1. ...

  5. 如何基于OM模型使用C#在程序中给SharePoint的BCS外部数据类型的字段赋值

    概述: 外部内容类型和数据,SharePoint从2010这个版本开始就对BCS提供非常强大的支持,点点鼠标就可以取代以前直接编辑XML的方式来设置SharePoint到SQL数据库的连接.非常方便地 ...

  6. 本周进步要点20161023(含李笑来第二场live笔记要点)

    本周主要忙于去武汉参加iDOF2016智能数字油田会议,会上做了题为“油田SOA及云平台的系统思考与实践”的报告,为了准备这篇报告,用到了一些以前学过的知识,具体内容见“参加iDOF2016会议的收获 ...

  7. iOS之深拷贝与浅拷贝

    在最开始,我们需要清楚一些关于内存分配方式的基础知识. 一般来说分为栈.堆.静态变量存储区.全局变量存储区.代码区. 前两个大家都懂的.通常将后三个合并称之为静态存储区,存储的是一些全局变量.静态变量 ...

  8. Gui系统之View体系(2)---View的setContent

    1.从SetContentView讲起 1.1Activty的setContentView里面的内容 public void setContentView(@LayoutRes int layoutR ...

  9. Ruby的require相关知识

    1. 在调用require xxx之前,需要确定xxx这个gem已经安装过了(使用gem install xxx,安装位置可以使用gem env列出),或者xxx是Ruby内置的标准函数库(StdLi ...

  10. Oracle Linux(64位)安装64位Oracle10g遇到ins_ctx.mk问题

    在Oracle Linux Server Release 5.7上安装64位Oracle 10g 时,遇到如下问题: Error in invoking target 'install' of mak ...