SQL Metal用于特定表或其他方式刷新/添加表到.dbml文件

时间:2010-07-18 15:07:32

标签: visual-studio linq-to-sql sqlmetal

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

我也试过看宏,但只记录产生

  Sub TemporaryMacro()
  End Sub

那里没有运气。

以任何方式编写脚本吗?

3 个答案:

答案 0 :(得分:3)

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

  1. 从当前目录(或路径)访问SQLMetal和SQLMetalInclude(您可能必须从源代码下载和构建)
  2. 在每行上创建一个带有表/视图名称的文件“chosenEntities.txt”。这些表将是唯一为其生成代码的表。
  3. 修改,保存并执行Generate.bat批处理代码
  4. (可选)将.bat文件作为外部运行工具添加到Visual Studio,如here所述
  5. Generate.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. 中间.dbml文件由sqlmetal照常生成。创建的dbml文件包含数据库中每个表的定义(以及视图,如果已选择)
    2. 下一个代码块循环遍历selectedEntities.txt,并为每行附加行内容(表名)加上逗号','
    3. 删除了最后一个尾随逗号
    4. 运行sqlmetalinclude,它基本上复制了原始的temp.dbml文件,但只包含您指定的表。还有其他选项,例如转换单个表名称
    5. sqlmetal第二次运行,这次根据缩减的.dbml文件生成实际的.cs代码。

答案 1 :(得分:2)

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

它不是免费的,但值得为任何严肃的Linq-to-SQL开发投资。

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

答案 2 :(得分:2)

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

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

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