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

时间:2015-03-20 21:19:03

标签: c# repository dotnetnuke

我有一个基于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的Extensions部分编译和安装时,一切都运行良好。在上面的代码中,MyModuleSettingsBase.DATABASE_CONNECTION_STRING_KEY位于我的模块解决方案的MyModuleSettingsBase.cs文件中。它被设置为一个简单的字符串,如&#34; ProductDatabase&#34;。在基本DNN安装(不是模块解决方案)的解决方案中,在web.config文件中,<connectionStrings>中的值为name="ProductDatabase",其中包含实际的连接字符串。这一切都在DNN网站上很好地链接。

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

我将我的疑问放在DNN官方论坛网站上,得到了Wes Tatters(DNN MVP)的有效回复。

以下是帖子链接:Reference URL

根据您的监控要求,我建议您创建DNN Schedule Application。您可以在DNN(主机 - &gt; AdvancedSettings-&gt;计划)中安排它,甚至可以在该计划应用程序中使用您的存储库(DNN库)。

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