4

任何人都可以在 Visual Studio 中执行此操作,而无需使用服务器资源管理器吗?

我也试过看宏,但只录制产品

  Sub TemporaryMacro()
  End Sub

所以那里没有运气。

有什么方法可以编写这个脚本吗?

4

3 回答 3

3

当基础表/视图更改时,我正在使用与此类似的批处理脚本来管理模型的更新。要使用它:

  1. 可以从当前目录(或路径中)访问SQLMetal 和SQLMetalInclude(您可能必须从源代码下载和构建)
  2. 创建一个文件“chosenEntities.txt”,每行都有一个表/视图名称。这些表将是为其生成代码的唯一表。
  3. 修改、保存并执行Generate.bat批处理代码
  4. (可选)将 .bat 文件作为外部运行工具添加到 Visual Studio,如此处所述

生成.bat:

sqlmetal /conn:"Data Source={Hostname};Initial Catalog={DBName};User ID={Username};Password={Password}" /dbml:temp.dbml /views

setlocal EnableDelayedExpansion
set file=chosenEntities.txt
set include=
FOR /F %%i IN (%file%) DO (
set include=!include!%%i,
)
set include=%include:~0,-1%

sqlmetalinclude -dbml:temp.dbml -output:ChosenEntities.dbml -include:%include%

sqlmetal /context:CustomDataContext /pluralize /namespace:MyNamespace.DB /language:csharp /code:DBEntities.cs /entitybase:DBEntityBase ChosenEntities.dbml

selectedEntities.txt 示例:

Accounts
Customers
PRODUCTS_VIEW
AnotherTable

解释:

  1. sqlmetal 像往常一样生成中间 .dbml 文件。创建的 dbml 文件包含数据库中每个表的定义(和视图,如果选择的话)
  2. 下一个代码块循环通过 selectedEntities.txt,并为每一行附加行内容(表名)加上逗号','
  3. 最后一个逗号被删除
  4. 运行 sqlmetalinclude,它基本上会复制原始 temp.dbml 文件,但只包括您指定的表。还有其他可用选项,例如转换单个表名
  5. 第二次运行 sqlmetal,这次根据缩减的 .dbml 文件生成实际的 .cs 代码。
于 2013-03-18T11:35:59.360 回答
2

SqlMetal Include对我来说就像一个魅力。首先使用 SqlMeta 创建一个完整的 dbml 文件 - 说 testComplete.dbml

现在将此文件作为 SqlMetaInclude 的输入提供 SqlMetalInclude /dbml:"testComplete.dbml" /output:"testSubSet.dbml" /include:dbo.SampleTable1=SampleTable1,dbo.SampleTable2=SampleTable2

请注意,此工具包含一个可以处理完整过程的 GUI。

于 2010-11-27T15:36:02.007 回答
2

有一个很好的实用程序可以帮助您从数据库中更新现有的 DBML 文件: Huagati DBML/EDMX 工具

它不是免费的,但对于任何认真的 Linq-to-SQL 开发来说都值得投资。

唯一的选择是自己编写——读取数据库结构并将其与 DBML 中的 XML 表示进行比较,并根据需要更新 DBML。

于 2010-07-18T15:52:18.593 回答