Subsonic 亚音速和多个提供商的问题

Subsonic 亚音速和多个提供商的问题,subsonic,Subsonic,我在一个项目中使用了两个用于两个不同数据库的亚音速生成数据访问层,因此我的web.config中有以下内容: <SubSonicService> <providers> <add name="BLLDB" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="BLLDB" generatedNamespace="BLLDB" useSPs="true" />

我在一个项目中使用了两个用于两个不同数据库的亚音速生成数据访问层,因此我的web.config中有以下内容:

<SubSonicService>
    <providers>
      <add name="BLLDB" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="BLLDB" generatedNamespace="BLLDB" useSPs="true" />
      <add name="BLLDB2" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="BLLDB2" generatedNamespace="BLLDB2" useSPs="true" />
    </providers>
  </SubSonicService>
mySelect.ProviderName返回一个字符串值:BLLDB2

而Databases.BLLDB返回一个字符串值:BLLDB


是什么让你的一个提供商失败了。亚音速不能告诉你它失败的原因和地点

我通常用两种方法进行调试

一次只使用一个提供者,并对另一个提供者进行注释。检查您是否能够看到名称空间。如果它们都加载良好,那么您至少知道它不是数据库

检查是否有任何表以-、\或数字开头。这也可能导致它失败


让我知道进展如何。

您的一个提供商失败了。亚音速不能告诉你它失败的原因和地点

我通常用两种方法进行调试

一次只使用一个提供者,并对另一个提供者进行注释。检查您是否能够看到名称空间。如果它们都加载良好,那么您至少知道它不是数据库

检查是否有任何表以-、\或数字开头。这也可能导致它失败


让我知道它是如何运行的。

您可以使用以下命令指定默认的提供程序:


您可以使用以下命令指定默认提供程序:


大家好,谢谢回复。。。Rob如果我指定了BLLDB的默认提供程序,那么最终会执行相同的操作,但是对于BLLDB而不是BLLDB2

i、 e.它只读取BLLDB而不读取BLLDB2

CodeToColory,我使用的是最新的DLL,在遇到这个问题之前,在亚音速下运行通常没有问题

您是否可以将您用于亚音速的web.config条目发布到两个提供商都在工作的地方

万分感谢

另外,当我指定在Select函数中直接使用哪个数据提供程序时,也很奇怪:

e、 g

然后我会:

mySelect.ProviderName,返回一个字符串值:BLLDB2不正确

而当我输出Databases.BLLDB的值时,它会返回一个字符串值:BLLDB correct


这实际上可能是问题的关键…

大家好,谢谢你们的回复。。。Rob如果我指定了BLLDB的默认提供程序,那么最终会执行相同的操作,但是对于BLLDB而不是BLLDB2

i、 e.它只读取BLLDB而不读取BLLDB2

CodeToColory,我使用的是最新的DLL,在遇到这个问题之前,在亚音速下运行通常没有问题

您是否可以将您用于亚音速的web.config条目发布到两个提供商都在工作的地方

万分感谢

另外,当我指定在Select函数中直接使用哪个数据提供程序时,也很奇怪:

e、 g

然后我会:

mySelect.ProviderName,返回一个字符串值:BLLDB2不正确

而当我输出Databases.BLLDB的值时,它会返回一个字符串值:BLLDB correct


这实际上可能是问题的关键…

在这里回答我自己的问题。。在使用VB.NET时,似乎确实不可能使用多个提供程序

正如codetolory提到的,这可能只适用于C语言,因为我从头开始测试了几个不同的场景,无法让2个亚音速生成的DAL并行工作


我得为他们中的一个把我自己的弄到一起所以。。不过,为这个建议干杯

这里只回答我自己的问题。。在使用VB.NET时,似乎确实不可能使用多个提供程序

正如codetolory提到的,这可能只适用于C语言,因为我从头开始测试了几个不同的场景,无法让2个亚音速生成的DAL并行工作


我得为他们中的一个把我自己的弄到一起所以。。不过,为这个建议干杯

我不熟悉使用2.2版C的亚音速。我花了很多时间尝试使用与Stimpy相同的配置。我想我找到了答案——我的解决方案如下。如果这是正确的,最好将此信息添加到Select Queries文档中。所以其他人可以更早地解决这个多数据提供程序问题。 这是web.config

<SubSonicService enableTrace="false" templateDirectory="">
<providers>
  <clear/>
  <add name="DB1" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="DB1" excludeProcedureList="*" generatedNamespace="DB1" includeTableList="TableA" tableBaseClass="RepositoryRecord"/>
  <add name="DB2" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="DB2" excludeProcedureList="*" generatedNamespace="DB2" includeTableList="TableB,TableC" tableBaseClass="RepositoryRecord"/>
</providers>
下面是从selectquerys文档示例中获取的不起作用的语句。SQL Server找不到TableA,因为它正在DB2中而不是在DB1中查找它:

DB1.TableA doesntWork = new Select().From<DB1.TableA>().                                  
            Where("idCol").IsEqualTo(1).ExecuteSingle<DB1.TableA>();
我的假设是,每个表的dataProvider将作为table类的属性生成

以下是使此工作正常的修改:

 Select mySelect = DB1.DB.Select();
 DB1.TableA works = mySelect.From<DB1.TableA>().
            Where("idCol").IsEqualTo(1).ExecuteSingle<DB1.TableA>();
或者,这也适用于:

DB1.TableA worksAlso = new Select(DataService.GetInstance(Databases.DB1)).From<DB1.TableA>().                                  
            Where("idCol").IsEqualTo(1).ExecuteSingle<DB1.TableA>();
如果您只有一个数据提供程序,或者在服务配置中指定。如果您尝试使用的是默认数据提供程序,则一切正常:

<SubSonicService enableTrace="false" defaultProvider="DB1" templateDirectory="">
但是,如果你不考虑 defaultProvider,默认为providers列表中的最后一个,在本例中为DB2

多DAL情况下的另一个重要信息-如果为每个提供程序将代码生成到不同的文件夹中,请确保在项目中仅“包括”自动生成到每个文件夹中的AllStructs.cs文件中的一个,否则,编译错误


仅供参考:这是Codesmith开源替代方案的开发者们的荣誉。到目前为止,除了这个问题,它很容易开始,并使其工作,特别是与子阶段。此外,我认为它最终将成为我的客户的一个重量更轻、成本效益更高的解决方案。谢谢大家!

我不熟悉使用2.2版C的亚音速。我花了很多时间尝试使用与Stimpy相同的配置。我想我找到了答案——我的解决方案如下。如果这是正确的,最好将此信息添加到Select Queries文档中。所以其他人可以更早地解决这个多数据提供程序问题。 这是web.config

<SubSonicService enableTrace="false" templateDirectory="">
<providers>
  <clear/>
  <add name="DB1" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="DB1" excludeProcedureList="*" generatedNamespace="DB1" includeTableList="TableA" tableBaseClass="RepositoryRecord"/>
  <add name="DB2" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="DB2" excludeProcedureList="*" generatedNamespace="DB2" includeTableList="TableB,TableC" tableBaseClass="RepositoryRecord"/>
</providers>
下面是从selectquerys文档示例中获取的不起作用的语句。SQL Server找不到TableA,因为它正在DB2中而不是在DB1中查找它:

DB1.TableA doesntWork = new Select().From<DB1.TableA>().                                  
            Where("idCol").IsEqualTo(1).ExecuteSingle<DB1.TableA>();
我的假设是,每个表的dataProvider将作为table类的属性生成

以下是使此工作正常的修改:

 Select mySelect = DB1.DB.Select();
 DB1.TableA works = mySelect.From<DB1.TableA>().
            Where("idCol").IsEqualTo(1).ExecuteSingle<DB1.TableA>();
或者,这也适用于:

DB1.TableA worksAlso = new Select(DataService.GetInstance(Databases.DB1)).From<DB1.TableA>().                                  
            Where("idCol").IsEqualTo(1).ExecuteSingle<DB1.TableA>();
如果您只有一个数据提供程序,或者在服务配置中指定。如果您尝试使用的是默认数据提供程序,则一切正常:

<SubSonicService enableTrace="false" defaultProvider="DB1" templateDirectory="">
但是,如果您不使用defaultProvider,那么它默认为提供者列表中的最后一个提供者(在本例中为DB2)

多DAL情况下的另一个重要信息-如果为每个提供程序将代码生成到不同的文件夹中,请确保在项目中仅“包括”自动生成到每个文件夹中的AllStructs.cs文件中的一个,否则,编译错误


仅供参考:这是Codesmith开源替代方案的开发者们的荣誉。到目前为止,除了这个问题,它很容易开始,并使其工作,特别是与子阶段。此外,我认为它最终将成为我的客户的一个重量更轻、成本效益更高的解决方案。谢谢大家!

我正在使用亚音速2.2子级。您需要分别更改多个提供程序的名称空间

一件重要的事。它将生成多个AllStructs.vb文件。它将由代码自动重复。但是你需要添加一个allstructs.vb,另一个只需删除就可以工作1000%

以下是web配置文件中的配置设置

 <connectionStrings>
    <add name="aspnetdb" connectionString="Data Source=(local); Database=aspnetdb; Integrated Security=true;"/>
    <add name="office" connectionString="Data Source=(local); Database=office; Integrated Security=true;"/>
</connectionStrings>
<SubSonicService defaultProvider="aspnetdb" enableTrace="false" templateDirectory="">
    <providers>
        <clear/>
        <add name="aspnetdb" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="aspnetdb"/>
        <add name="office" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="office"/>
    </providers>
</SubSonicService>

我使用亚音速2.2子级。您需要分别更改多个提供程序的名称空间

一件重要的事。它将生成多个AllStructs.vb文件。它将由代码自动重复。但是你需要添加一个allstructs.vb,另一个只需删除就可以工作1000%

以下是web配置文件中的配置设置

 <connectionStrings>
    <add name="aspnetdb" connectionString="Data Source=(local); Database=aspnetdb; Integrated Security=true;"/>
    <add name="office" connectionString="Data Source=(local); Database=office; Integrated Security=true;"/>
</connectionStrings>
<SubSonicService defaultProvider="aspnetdb" enableTrace="false" templateDirectory="">
    <providers>
        <clear/>
        <add name="aspnetdb" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="aspnetdb"/>
        <add name="office" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="office"/>
    </providers>
</SubSonicService>

嗨,亲爱的。。。两个DAL各自工作正常,所有表名都正常,在专门使用这些DAL的其他项目中没有问题。。。当在一个项目中使用2个DAL时,似乎会出现问题。顺便问一下,这是因为提供程序名称相似,唯一的区别是整数。。i、 从BLLDB到BLLDB2?刚刚在那里试过。。似乎没有什么不同。。。啊,好吧,我得为他们中的一个拼凑我自己的木偶。。我想你一次只能和一个提供商使用亚音速,我肯定两个提供商都为我工作。为什么不创建两个简单的数据库A和B,分别使用表P和表Q,看看是否有效。如果这不起作用,那么我认为您的机器上的亚音速DLL存在一些损坏。确保您拥有正确的DLL。尝试使用subsonicHi CodeToColor附带的初学者工具包。。。两个DAL各自工作正常,所有表名都正常,在专门使用这些DAL的其他项目中没有问题。。。当在一个项目中使用2个DAL时,似乎会出现问题。顺便问一下,这是因为提供程序名称相似,唯一的区别是整数。。i、 从BLLDB到BLLDB2?刚刚在那里试过。。似乎没有什么不同。。。啊,好吧,我得为他们中的一个拼凑我自己的木偶。。我想你一次只能和一个提供商使用亚音速,我肯定两个提供商都为我工作。为什么不创建两个简单的数据库A和B,分别使用表P和表Q,看看是否有效。如果这不起作用,那么我认为您的机器上的亚音速DLL存在一些损坏。请确保您拥有正确的DLL。尝试使用subsonicHi Rob附带的初学者工具包,我认为他的问题是他在内存中没有看到一个数据库。这发生在我身上,是一个亚音速版本的问题。我有最新的
我想他的问题是,他没有在内存中看到一个数据库。这发生在我身上,是一个亚音速版本的问题。我有最新版本的starter kit,它可以工作。我在我的应用程序中使用了7个不同的提供程序,工作正常,但我使用的是C。也许你用错误的提供程序生成代码?我在我的应用程序中使用了7个不同的提供程序,工作正常,但我使用的是C。也许你用错误的提供程序生成代码?