在控制台应用程序中重用 DNN 数据库存储库

DNN Database Repository Reuse in Console Application

我有一个基于 Chris Hammond、Christoc 模块模板的项目。我有大量代码用于访问外部数据库的数据。在我的存储库中,我将数据库从默认值更改为该特定对象所需的数据库。我这样做的代码如下所示:

using (IDataContext ctx = DataContext.Instance(MyModuleSettingsBase.DATABASE_CONNECTION_STRING_KEY))
{
    var rep = ctx.GetRepository<Product>();
    products = rep.Get().ToList();
}

在调用 .Instance(). 时切换了默认数据库 我的自定义 DNN 模块使用存储库。存储库是包含多个自定义模块的解决方案的一部分。当我使用 DNN 的扩展部分编译和安装时,一切正常。在上面的代码中,MyModuleSettingsBase.DATABASE_CONNECTION_STRING_KEY 是在我的模块解决方案的 MyModuleSettingsBase.cs 文件中找到的。它被设置为一个简单的字符串,如 "ProductDatabase"。在基本 DNN 安装的解决方案(不是模块解决方案)中,在 web.config 文件中,<connectionStrings>name="ProductDatabase" 中有一个值包含实际的连接字符串。这一切 link 在 DNN 网站上都正常。

现在我正在编写一个控制台应用程序来对网站进行一些监控。我想访问数据库以检查产品 table 中的值。我想重用我编写的所有存储库代码。为了尝试这样做,我添加了对 MyModules.dll 文件的引用,这样我就只有一份基本代码。这可以让我访问所有对象和关联的存储库,但是当我尝试查询数据时它失败了。调试时我可以看到它失败了:

using (IDataContext ctx = DataContext.Instance(MyModuleSettingsBase.DATABASE_CONNECTION_STRING_KEY)) 

在调试器中查看时,字符串值 MyModuleSettingsBase.DATABASE_CONNECTION_STRING_KEY 正确设置为 "ProductDatabase",但代码无法 link 使用实际连接字符串。当我的控制台应用程序 运行 时,我不知道它会在哪里检查连接字符串。我试图将 <connectionStrings> 部分放入我的 App.config 文件中,但这没有成功。

是否可以 MyModuleSettingsBase.DATABASE_CONNECTION_STRING_KEY 映射到引用 DLL 的外部应用程序中的连接字符串?

如果是这样,我在哪里可以设置我的连接字符串的值,使其与存储在 MyModuleSettingsBase.DATABASE_CONNECTION_STRING_KEY 中的键值相匹配?

我在 3 个月前遇到过类似的问题,当时我想在我的控制台应用程序中使用 DNN 核心库,但我失败了。

我在 DNN 官方论坛网站上提出了问题,并得到了 Wes Tatters (DNN MVP) 的有效回复。

这里是 post link: Reference URL

根据您的监控需求,建议您创建DNN Schedule Application。您可以在 DNN 中安排它(Host->AdvancedSettings->Schedule),甚至好的一点是您可以在该计划应用程序中使用您的存储库(DNN 库)。

我希望它能解决你的问题。如果您有任何问题,请告诉我。