不能让ActiveRecordSectionHandler正常工作

本文关键字:工作 常工作 ActiveRecordSectionHandler 不能 | 更新日期: 2023-09-27 17:53:11

我在测试项目中设置了以下配置:

<configuration>
  <configSections>
    <section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" />
    ...
  </configSections>
  ...
  <activerecord>
    <config>
      <add key="connection.provider" value="(MyNamespace).Tests.Helpers.TestingConnectionProvider, (MyNamespace).Tests" />
      <add key="dialect" value="NHibernate.Dialect.NHibernate.Dialect.SQLiteDialect" />
      <add key="connection.driver_class" value="NHibernate.Driver.SQLiteDriver" />
      <add key="connection.connection_string" value="Data Source=:memory:;Version=3;New=True;" />
      <add key="show_sql" value="true" />
      <add key="query.substitutions" value="true=1;false=0" />
      <add key="proxyfactory.factory_class" value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle"/>
    </config>
  </activerecord>
  ...
</configuration>

我还向键添加了nhibernate前缀,正如一些文档所建议的那样。我的连接提供程序看起来像:

public class TestingConnectionProvider : DriverConnectionProvider
{
    public static IDbConnection Connection { get; private set; }
    public override IDbConnection GetConnection()
    {
        return Connection ?? (Connection = base.GetConnection());
    }
}

当我尝试运行测试时:

[TestClass]
public class PersistenceTests
{
    [TestMethod]
    public void CanBuildSchemaInMemory()
    {
        if (File.Exists("SqlCreate.sql")) File.Delete("SqlCreate.sql");
        ActiveRecordStarter.Initialize(typeof(IPermissionsManager).Assembly, new ActiveRecordSectionHandler());
        ActiveRecordStarter.GenerateCreationScripts("CreateNew.sql");
        Assert.IsTrue(File.Exists("SqlCreate.sql"));
    }
}

…我得到一个失败,表明我没有正确设置。但是,如果我将ActiveRecordSectionHandler()更改为:

InPlaceConfigurationSource.Build(DatabaseType.MsSqlServer2008, "Server=localhost, Initial Catalog=Permissions, Integrated Security=SSPI;")

…这是有效的,所以很明显问题是我的配置。我做错了什么?

不能让ActiveRecordSectionHandler正常工作

好吧,这是基于我做的一些愚蠢的事情,以及对其他一些事情的真正缺乏理解。

愚蠢的事情#1:我正在生成一个与我正在寻找的名字不同的文件。干得好,杰瑞米。 愚蠢的事情#2:我在我的配置文件中有额外的命名空间元素;不是NHibernate.Dialect.NHibernate.Dialect.SQLiteDialect,是NHibernate.Dialect.SQLiteDialect

真正的误解:我以为ActiveRecordSectionHandler是要实例化的;事实证明,我需要Instance的静态属性来工作。所以它应该是这样的:

ActiveRecordStarter.Initialize(typeof(IPermissionsManager).Assembly, ActiveRecordSectionHandler.Instance);

瞧!