提供的连接必须是 AstDbConnectionNode 类型

Supplied connections must be of type AstDbConnectionNode

我一直在研究一个简单的 BIML 解决方案,以开始学习如何使用它。我不断收到错误消息:

Supplied connections must be of type AstDbConnectionNode for this method. at Varigence.Biml.Extensions.ExternalDataAccess.GetDatabaseSchema in :line 0

我一直在搜索和尝试不同的解决方案,但尚未找到答案。所以,我转向这里的每个人。我需要另一双眼睛来看待这个问题,这样我才能弄清楚我做错了什么。

我的第一个 BIML 文件在我的本地盒子上设置了与 World Wide Importers 的连接。

<Biml xmlns="http://schemas.varigence.com/biml.xsd">

<#@ template language = "C#" tier="0" #>

<Connections>
<OleDbConnection
    Name="src" 
    ConnectionString="Data Source=localhost\SQL16;Initial Catalog=WorldWideImporters;Provider=SQLNCLI11.1;Integrated Security=SSPI;" 
    CreateInProject = "true">
</OleDbConnection>
</Connections>

<Databases>
    <Database Name="src" ConnectionName = "src" />
</Databases>

第二个 BIML 文件引发错误

<Biml xmlns="http://schemas.varigence.com/biml.xsd">

<#@ template language = "C#" tier = "1" #>
<#@ import namespace="Varigence.Biml.CoreLowerer.SchemaManagement" #>

<# var srcDB = RootNode.OleDbConnections["src"]; #>
<# var WWIdb = srcDB.GetDatabaseSchema(ImportOptions.ExcludeViews); #>

<Packages>
    <# foreach (var table in WWIdb.TableNodes) { #>
    <Package Name="<#=table.Schema#>_<#=table.Name#>"     ConstraintMode="Linear">
        <Tasks>
            <Dataflow Name="DF Copy <#=table.Name#>">
            </Dataflow>
        </Tasks>
    </Package>
    <# } #>
</Packages>
</Biml>

调用 GetDatabaseSchema 时出现误导性错误 我说这是误导性的,因为根本问题是 srcDB 为空。在您的第二个 Biml 文件中使用此代码亲自查看。

<#@ import namespace="System.Windows.Forms" #>
<#@ assembly name= "C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Windows.Forms.dll" #>
<# var srcDB = RootNode.OleDbConnections["ConnectionDoesNotExist"]; #>
<#
    if (srcDB == null)
    {
        MessageBox.Show("It's null");
    }
    else
    {
        MessageBox.Show("It's not null - {0}", srcDB.Name);
    }
#>

根问题

您正在访问连接集合中不​​存在的对象 - 可能是因为当您的分层正确时,您需要在构建时 "include" 所有文件。

你是如何解决这个问题的?

如果您使用的是BimlExpress or BIDS Helper,那么您只需要select解决方案菜单中的file1.biml和file2.biml,然后右键单击生成包。

如果您使用的是 Mist/BimlStudio,那么我只需右键单击 file1.biml 并将其更改为 Convert to Live BimlScript。