使用 PowerShell 脚本动态生成实体类






4.11/5 (2投票s)
展示了如何通过从 PowerShell 脚本调用实用程序来生成实体类
引言
LINQ to SQL是.NET Framework 3.5版本的一个组件,它提供一个运行时基础设施,用于将关系数据作为对象进行管理。使用Visual Studio的开发者通常使用对象关系设计器,该设计器提供一个用户界面来实现LINQ to SQL的许多功能;然而,有时大型数据库可能需要一些时间来生成,如果您的.NET项目包含大量需要构建的文件和解决方案;当存在分布式开发团队时,这实际上可能是构建过程的一部分。
背景
为了演示目的,我将使用
- PowerShell命令来执行脚本
- SqlMetal命令行工具
- AdventureWorks2008 数据库
开始之前
假设您之前已安装AdventureWorks2008,请继续并将AdventureWorks_Data.mdf复制到任何文件夹进行测试。我使用的是C:\adw\AdventureWorks_Data.mdf。在复制之前,您可能需要停止SQL服务。
Using the Code
SqlMetal
命令行工具为.NET Framework的LINQ to SQL组件生成代码和映射。
通过应用选项,您可以指示SqlMetal
执行几个不同的操作,其中包括以下内容
- 从数据库生成源代码和映射属性或映射文件。
- 从数据库生成中间数据库标记语言(.dbml)文件以进行自定义。
- 从.dbml文件生成代码和映射属性或映射文件。
通常安装在C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin。
这种方法适用于大型数据库,也许您也可以在构建过程中发现它很有用。
SQLMetal文件包含在与Visual Studio一起安装的Windows SDK中。
命令语法如下所示
sqlmetal [options] [path]
要查看最新的选项列表,请从安装位置的命令提示符处键入sqlmetal /?
。目前有四种选项类型:连接
,提取
,输出
和杂项
。
关注点
确保sqlmetal
工作正常,只需运行指向*.mdf文件所在文件夹的命令即可,如下所示。在Visual Studio命令提示符(2010)中,输入类似的内容
sqlmetal /code:"c:\adw\AdventureWorks.cs" /language:csharp
"C:\adw\AdventureWorks_Data.mdf"
结果应该是一个C#代码文件,但是您可以使用/language:vb
指定VB。
它应该看起来像这样
输出应该是
现在我们已经成功生成了我们的对象模型,让我们继续创建一个支持序列化的模型。
像这样
sqlmetal /code:"c:\adw\SerialAdventureWorks.cs" /language:csharp
/serialization:Unidirectional "C:\adw\AdventureWorks_Data.mdf"
现在我们有了另一个支持序列化的对象。显然,在支持序列化时,构建需要更长的时间,并且生成的代码类文件的大小更大。
这两个文件之间几乎有100kb的差异!此外,如果您想生成*.dbml文件,可以通过运行来实现
sqlmetal /dbml:"c:\adw\AdventureWorks.dbml" /language:csharp
/serialization:Unidirectional "C:\adw\AdventureWorks_Data.mdf"
您也可以生成视图,函数和存储过程,但您必须在命令参数中指明这些。
我将展示如何使用PowerShell脚本来实现这一点。
现在我们可以开始在我们的脚本中工作了。为此,我们将使用cmdlet
。
Cmdlet概述
cmdlet
是在Windows PowerShell环境中使用的轻量级命令。Windows PowerShell运行时在命令行提供的自动化脚本的上下文中调用这些cmdlet
。Windows PowerShell运行时也通过Windows PowerShell API以编程方式调用它们。这是命令在PowerShell编辑器中的显示方式
$FrameworkPath = "C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319"
$SDKPath = "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin"
invoke-expression "& '$SDKPath\sqlmetal.exe' '/code:c:\adw\AdventureWorks.cs'
'/language:csharp' 'C:\adw\AdventureWorks_Data.mdf' '/namespace:AdventureWorks.Database'
'/views' '/functions' '/sprocs' '/serialization:Unidirectional'"
这个*.PS1文件生成另一个包含所有功能(包括存储过程,视图,函数等)的类。
正如您所看到的,类文件的大小越来越大,最终大小为759。
当然,为了在构建过程中使用该文件,还必须对其进行其他一些小的调整;但这是另一篇文章的主题!
来源: http://msdn.microsoft.com/en-us/library/bb386987.aspx
致谢
所做的更正是由Mark推荐的。感谢Mark的建议。
历史
- 2011 年 8 月 4 日:初始版本