65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 SQLMetal 代码生成器工具进行 LINQ to SQL

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.13/5 (7投票s)

2009年4月19日

CPOL

6分钟阅读

viewsIcon

107713

downloadIcon

3342

使用 SQLMetal 代码生成器工具进行 LINQ to SQL

介绍 

MS 推出的 ORM(对象关系映射)工具早就该发布了,我相信你们中的许多人已经探索过 LINQ。

那么,SQLMetal 是什么?

它是由微软构建的代码生成工具,用于辅助基于 LINQ 的开发。该工具可以生成原本需要手动编写的代码和映射。除非您拥有 Visual Studio 2008 IDE。即使如此,也只需将表和其他数据库对象拖放到 LINQ to SQL 环境中即可。此外,在团队开发中,DBA 或其他开发人员所做的数据库更改需要集成到您的开发环境中。每次更改后,您都需要在 LINQ to SQL 环境中删除并重新创建每个数据库对象。不用说,这将是一项不必要的繁琐任务。但有了 SQLMetal,每次发生更改时,您都可以生成并分发 dbml 文件。由于它是一个命令行工具,因此也可以将其包含在自动化构建过程中。

请注意,我在本文中仅演示了一种使用 SQLMetal 的方法。还有其他几种使用方法。

概述  

SQLMetal 作为命令行工具运行,接受一系列参数选项,例如数据库连接参数,并输出映射或代码文件。然后,您可以在开发环境中使用此代码文件和 LINQ 代码来访问和操作数据库中的数据。请注意,SQLMetal 会生成一个包含所有代码或映射的文件。

位置  


该工具位于以下目录:

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\SqlMetal.exe

如何使用该工具 


1. 如果您使用 Visual Studio,请创建一个 Web 项目,例如:NorthWind。然后添加一个名为 DAL 的文件夹。

2. 为 SQLMetal 输出文件创建一个空文件夹,例如:C:\MyProject

3. 然后打开命令窗口,导航到 SqlMetal 所在的目录(参见“位置”)。

4. 然后使用以下命令生成一个名为 NorthWind.dbml 的单个文件。

SqlMetal.exe /server:localhost /database:NorthWind /dbml:C:\MyProject\DAL\NorthWind.dbml /namespace:NorthWind.DAL
/Context:NorthWindDataContext /provider:SQL2005 /pluralize



* 为了遵循 MS 的命名约定,我在我的 DataContext 类名称后附加了“DataContext”,这有助于将其标识为 DataContext 对象。但是,您可以根据需要命名它。
* 我创建了一个单独的文件夹(例如:DAL)来存放自动生成的代码,这可以更好地管理您的代码。
* 我在生成代码时使用了 pluralize 选项,因为它使枚举对象的命名更易于编写和理解。

使用自动生成的代码。 


如果您使用 Visual Studio,您需要将 NorthWind.dbml 添加到 DAL 文件夹中。为此,请在解决方案资源管理器中右键单击项目下的 DAL 文件夹,然后单击“添加”,再单击“现有项”,导航到 DAL 文件夹或您生成输出文件的任何其他位置,并将其包含在项目中。

首先,我们需要创建一个连接字符串,出于实际考虑,最好将其放在 web.config 中。

  <connectionStrings>
    <add name="NorthwindConnectionString" connectionString="Data Source=localhost;Initial Catalog=Northwind;Integrated Security=True"
    providerName="System.Data.SqlClient" />
  </connectionStrings>

您可以声明一个字符串变量并使用 ConfigurationManager 从 web.config 获取连接字符串值。
  
  string connStr = ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString;

实例化 NorthWindDataContext 类的对象并编写您的 LINQ 查询。
     NorthWind.DAL.NorthWindDataContext db = new NorthWind.DAL.NorthWindDataContext(connStr);
     var cust = from c in db.Customers  select c;

然后,您可以以任何您想要的方式使用数据,我在这里将其用于绑定到 GridView 控件。
    gv.DataSource = cust;
    gv.DataBind();

* 如果您需要扩展 DataContext 对象,我建议您编写包装类来实现,而不是直接修改自动生成的代码,因为在开发过程中您可能需要多次重新生成代码。

提高生产力

您可以将命令行执行存储在批处理文件中。这样,每次数据库发生更改时,您都可以一键重新生成代码。我在下载文件中包含了一个批处理文件。

* 我假设您将在此目录下部署:C:\,请参阅批处理文件。如果不是,请对批处理文件进行相应更改。

SQLMetal 的完整选项和用法列表 

SqlMetal [options] [<input file>]

  - 为 .NET 框架的 LINQ to SQL 组件生成代码和映射。SqlMetal 可以
  - 从数据库生成源代码和映射属性或映射文件。
  - 生成一个中间 dbml 文件,用于从数据库进行自定义。
  - 从 dbml 文件生成代码和映射属性或映射文件。

选项: 


  /server:<name>                   数据库服务器名称。
  /database:<name>               服务器上的数据库目录。
  /user:<name>                      登录用户名(默认:使用 Windows 身份验证)。
  /password:<password>          登录密码(默认:使用 Windows 身份验证)。
  /conn:<connection string>     数据库连接字符串。不能与 /server、/database、/user 或 /password 选项一起使用。
  /timeout:<seconds>              SqlMetal 访问数据库时使用的超时值(默认:0,表示无限)。

  /views                                提取数据库视图。
  /functions                           提取数据库函数。
  /sprocs                               提取存储过程。

  /dbml[:file]                          输出为 dbml。不能与 /map 选项一起使用。
  /code[:file]                          输出为源代码。不能与 /dbml 选项一起使用。
  /map[:file]                           生成映射文件,而不是属性。不能与 /dbml 选项一起使用。

  /language:<language>           源代码语言:VB 或 C#(默认:从代码文件名扩展名派生)。
  /namespace:<name>              生成代码的命名空间(默认:无命名空间)。
  /context:<type>                    数据上下文类的名称(默认:从数据库名称派生)。
  /entitybase:<type>                生成代码中实体类的基类(默认:实体没有基类)。
  /pluralize                              使用英语规则自动复数化或单数化类和成员名称。
  /serialization:<option>            生成可序列化类:None 或 Unidirectional(默认:None)。
  /provider:<type>                   提供程序类型:SQLCompact、SQL2000 或 SQL2005。(默认:提供程序在运行时确定)。

  <input file>                           可以是 SqlExpress mdf 文件、SqlCE sdf 文件或 dbml 中间文件。

从 SqlServer 创建代码
  SqlMetal /server:myserver /database:northwind /code:nwind.cs /namespace:nwind

从 SqlServer 生成中间 dbml 文件
  SqlMetal /server:myserver /database:northwind /dbml:northwind.dbml /namespace:nwind

使用外部映射从 dbml 生成代码
  SqlMetal /code:nwind.cs /map:nwind.map northwind.dbml

从 SqlCE sdf 文件生成 dbml
  SqlMetal /dbml:northwind.dbml northwind.sdf

从 SqlExpress 本地服务器生成 dbml
  SqlMetal /server:.\sqlexpress /database:northwind /dbml:northwind.dbml

使用命令行中的连接字符串生成 dbml
  SqlMetal /conn:"server='myserver'; database='northwind'" /dbml:northwind.dbml

兴趣点 

由于它是一个命令行工具,可以在您的生成文件/过程中使用。

很遗憾,不支持维护自动化代码的版本历史记录,但您可以通过将输出与代码存储库集成来解决此问题,请参阅下载中包含的批处理文件。 

资源 

Northwind 示例数据库不随 SQL2005 一起安装,您可以从此处获取。

http://www.sunsource.net/scdocs/ddUsingSVN_command-line

历史  

    
© . All rights reserved.