作甚?

先说说这个工具是干啥的,我们所做的程序,或多或少需要存储一些数据到数据库,当然直接使用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. 小记max-with与 max-device-width

    max-with是浏览器的宽度,max-device-width是设备显示器的宽度 浏览器宽度不等于显示器宽度 浏览器可以缩小 1.max-device-width是设备整个显示区域的宽度,例如,真实 ...

  2. vue+ vue-router + webpack 踩坑之旅

    说是踩坑之旅 其实是最近在思考一些问题 然后想实现方案的时候,就慢慢的查到这些方案   老司机可以忽略下面的内容了 1)起因  考虑到数据分离的问题  因为server是express搭的   自然少 ...

  3. npm插件制作及发布基础教程

    最近有同事在搞npm插件,想用了这么久的npm也没有自己制作一个插件出来练一练,所以动手把之前的图片随手势移动的react组件改写成了npm插件,之前的博客地址http://www.cnblogs.c ...

  4. 解决JqueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug

    前些日子不是在做 使用Jquery-UI实现一次拖拽多个选中的元素操作嘛,在持续完善这个组件时遇到了一个关于拖放排序的bug.今天就着图片和代码重现一下,也顺便告诉大家如何解决这个问题. 首先先上图描 ...

  5. iOS AutoLayout的用法

    添加约束 代码实现Autolayout的步骤 利用NSLayoutConstraint类创建具体的约束对象 添加约束对象到相应的view上 - (void)addConstraint:(NSLayou ...

  6. NSString 的常用操作

    NSString *testStr01=@"HelloWord"; NSString *testStr02=[testStr01 substringToIndex:];//取头(从 ...

  7. IOS开发之支付功能概述

    前言:本随笔将对IOS开发的支付功能进行一个概述. 内容大纲: 一.常见的支付方案简介 二.第三方支付SDK 三.苹果官方支付方案 四.Web支付方案 正文: 一.常见的支付方案简介 在微信支付中 微 ...

  8. LinkedList 浅析示例

    package com.smbea.demo; import java.util.Iterator; import java.util.LinkedList; import java.util.Lis ...

  9. SE(homework2)_软件分析

    老师这次课后的作业具有开放性,很容易的我会想到经常用的那些工具软件,MATLAB,envi,ARCGIS等等. Q1:此类软件是什么时候出现的,这些软件是怎么说服你(陌生人)成为它们的用户的?他们的目 ...

  10. Git 工作流程

    Git 作为一个源码管理系统,不可避免涉及到多人协作. 协作必须有一个规范的工作流程,让大家有效地合作,使得项目井井有条地发展下去.”工作流程”在英语里,叫做”workflow”或者”flow”,原意 ...