SqlMetal.exe ORM代码生成
作甚?
先说说这个工具是干啥的,我们所做的程序,或多或少需要存储一些数据到数据库,当然直接使用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代码生成的更多相关文章
- 设置数据库为SINGLE_USER模式,减少锁定时间
--SQL Server开启READ_COMMITTED_SNAPSHOT ----设置数据库为SINGLE_USER模式,减少锁定时间 ALTER DATABASE ENDV_SOA SET SIN ...
- SOS.dll(SOS 调试扩展)
SecAnnotate.exe(.NET 安全批注器工具) SignTool.exe(签名工具) Sn.exe(强名称工具) SOS.dll(SOS 调试扩展) SqlMetal.exe(代码 ...
- .NET Framework 工具
您可以使用 .NET Framework 工具轻松创建.部署和管理面向 .NET Framework 的应用程序和组件. 此节中介绍的大部分 .NET Framework 工具将自动随 Visual ...
- 使用sqlmetal工具自动生成SQL数据库的Linq类文件
第一部:找到sqlmetal.exe. 运行cmd. 执行命令 cd C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5 ...
- 2014年4月份第3周51Aspx源码发布详情
WPY净水机网站源码 2014-4-14 [VS2008]源码描述: 实现产品展示,在线留言,信息发布,在线咨询,营销网络地图. 网站基本管理:网站banner管理 管理首页滚动图片信息 网站右下部 ...
- myGeneration代码生成器
转自:http://www.cnblogs.com/leitwolf/archive/2007/07/27/833255.html http://blog.csdn.net/happyhippy/ar ...
- sql2000下如何新建并使用dbml
默认新建的dbml只是支持sql2005及其以上版本. 但是现在是sql2000怎么办?我要是想要用linq to sql 的? 解决方案如下: 1首先打开cmd,在其中cd到sqlmetal.exe ...
- WCF技术剖析之十一:异步操作在WCF中的应用(上篇)
原文:WCF技术剖析之十一:异步操作在WCF中的应用(上篇) 按照操作执行所需的资源类型,我们可以将操作分为CPU绑定型(CPU Bound)操作和I/O绑定型(I/O Bound)操作.对于前者,操 ...
- Windows 编程,程序编译使用的命令行工具。
Windows 编程,程序编译使用的命令行工具. 1.cl.exe文件是Visual C\C++的编译器,它将程序源代码文件编译为obj文件. 2.rc.exe文件是资源编译器.工程项目中的.rc文件 ...
随机推荐
- 小记max-with与 max-device-width
max-with是浏览器的宽度,max-device-width是设备显示器的宽度 浏览器宽度不等于显示器宽度 浏览器可以缩小 1.max-device-width是设备整个显示区域的宽度,例如,真实 ...
- vue+ vue-router + webpack 踩坑之旅
说是踩坑之旅 其实是最近在思考一些问题 然后想实现方案的时候,就慢慢的查到这些方案 老司机可以忽略下面的内容了 1)起因 考虑到数据分离的问题 因为server是express搭的 自然少 ...
- npm插件制作及发布基础教程
最近有同事在搞npm插件,想用了这么久的npm也没有自己制作一个插件出来练一练,所以动手把之前的图片随手势移动的react组件改写成了npm插件,之前的博客地址http://www.cnblogs.c ...
- 解决JqueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug
前些日子不是在做 使用Jquery-UI实现一次拖拽多个选中的元素操作嘛,在持续完善这个组件时遇到了一个关于拖放排序的bug.今天就着图片和代码重现一下,也顺便告诉大家如何解决这个问题. 首先先上图描 ...
- iOS AutoLayout的用法
添加约束 代码实现Autolayout的步骤 利用NSLayoutConstraint类创建具体的约束对象 添加约束对象到相应的view上 - (void)addConstraint:(NSLayou ...
- NSString 的常用操作
NSString *testStr01=@"HelloWord"; NSString *testStr02=[testStr01 substringToIndex:];//取头(从 ...
- IOS开发之支付功能概述
前言:本随笔将对IOS开发的支付功能进行一个概述. 内容大纲: 一.常见的支付方案简介 二.第三方支付SDK 三.苹果官方支付方案 四.Web支付方案 正文: 一.常见的支付方案简介 在微信支付中 微 ...
- LinkedList 浅析示例
package com.smbea.demo; import java.util.Iterator; import java.util.LinkedList; import java.util.Lis ...
- SE(homework2)_软件分析
老师这次课后的作业具有开放性,很容易的我会想到经常用的那些工具软件,MATLAB,envi,ARCGIS等等. Q1:此类软件是什么时候出现的,这些软件是怎么说服你(陌生人)成为它们的用户的?他们的目 ...
- Git 工作流程
Git 作为一个源码管理系统,不可避免涉及到多人协作. 协作必须有一个规范的工作流程,让大家有效地合作,使得项目井井有条地发展下去.”工作流程”在英语里,叫做”workflow”或者”flow”,原意 ...