【发布时间】:2014-08-12 17:22:19
【问题描述】:
我正在为 EA 编写插件,但连接字符串有问题。
如何在 nHibernate 中使用来自EA.Repository 的连接字符串?或者如何从 EA 中提取连接详细信息。
我可以有user id、db type,但例如我不知道如何提取数据库名称。
【问题讨论】:
标签: c# nhibernate database-connection connection-string enterprise-architect
我正在为 EA 编写插件,但连接字符串有问题。
如何在 nHibernate 中使用来自EA.Repository 的连接字符串?或者如何从 EA 中提取连接详细信息。
我可以有user id、db type,但例如我不知道如何提取数据库名称。
【问题讨论】:
标签: c# nhibernate database-connection connection-string enterprise-architect
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; 结尾,因此您也需要将其删除。
【讨论】: