从EA到nHibernate的连接字符串

本文关键字:连接 字符串 nHibernate EA | 更新日期: 2023-09-27 18:16:38

我正在写插件到EA,我有连接字符串的问题。如何使用连接字符串从EA.Repository在nHibernate?或者如何从EA提取连接细节。我可以有user id, db type,但例如,我不知道如何提取数据库的名称。

从EA到nHibernate的连接字符串

DBMS连接字符串是很难驯服的野兽,因为格式是可扩展的,因此为了正确解析一个连接字符串,您需要考虑到各种DBMS提供程序想要实现的任何扩展。EA并没有让事情变得更简单,实际上它会重载连接字符串。

您可以从Repository.ConnectionString属性中检索EA所引用的连接字符串。对于EAP文件,这只是文件名。在DBMS的情况下,它是EAConnectString:<name> --- DBType=<type_nr>;Connect=<connection_string>形式的字符串。

<name>是一个符号名称,它可以是任何东西,它不需要或保证是特定数据库的名称。<type_nr>是EA对DBMS类型的内部数字标识。这些都没有文档记录,但可以通过一些测试推断出来。Repository.RepositoryType()可能会有所帮助。最后,<connection_string>是DBMS的连接字符串。

因此,如果您切断所有直到并包括Connect=的内容,您应该最终得到ODBC将识别的连接字符串。在这个"正确的"连接字符串中,您将找到Data Source=<source>Initial Catalog=<db_name><source>通常是服务器和端口,<db_name>是数据库的名称。

注意,EA在连接到DBMS时支持"延迟加载"模式。在这种模式下,数据库的内容只在需要时读取(即在项目浏览器中展开节点或打开图表时)。如果以这种模式打开了存储库,则连接字符串LazyLoad=1;结束,因此您也需要将其截断。