代码之家  ›  专栏  ›  技术社区  ›  isuruceanu

用nant xmlpoke更改nhibernate配置

  •  2
  • isuruceanu  · 技术社区  · 15 年前

    如何使用nant从nhibernate.config文件更改连接字符串

    问题是,所有示例都是关于更改属性值的,但是nhibernate具有内部文本

    情商:

    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
     <session-factory>
        <property name="connection.connection_string">Data Source.\server;Database=UnitTestDb;UID=user;pwd=pass;</property>
        <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
        <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
        <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
        <property name="show_sql">true</property>
        <property name="connection.release_mode">auto</property>
        <property name="adonet.batch_size">500</property>
        ....
    

    我需要更改属性connection.connection\u string

    <xmlpoke        file="${nhibernate.file}"
            xpath="/hibernate-configuration/session-factory/add[@key='connection.connection_string']/@value"
            value="${connection.string}">
    </xmlpoke>
    

    在这种情况下,这不起作用。

    谢谢

    1 回复  |  直到 15 年前
        1
  •  7
  •   Peter Lillevold Rene    15 年前

    您使用的示例xpath引用了名为 add 调用了属性 key . 在您的情况下,您正在寻找 property 具有调用的属性的元素 name .

    下一步,因为您要更改内部文本而不是 @value 属性 财产 元素,应移除尾随属性引用。

    最后,由于nhibernate XML有一个特定的名称空间,您必须通知 xmlpoke 使用正确的命名空间。

    所以任务应该是这样的:

    <xmlpoke file="${nhibernate.file}"
        xpath="/nhc:hibernate-configuration/nhc:session-factory/nhc:property[@name='connection.connection_string']"
        value="${connection.string}">
        <namespaces>
            <namespace prefix="nhc" uri="urn:nhibernate-configuration-2.2" />
        </namespaces>
    </xmlpoke>
    

    注意:我还没有测试过这一点,但是通用的XML/XPath规则在这里起作用,所以我希望它能起作用。另外,也可以有一种方法向xmlpoke指示指定的名称空间应该是默认名称空间,从而消除了对xpath中所有不同部分的名称空间前缀的需要。

    祝你好运!