【问题标题】:Adding SQL Server CE files in app_data folder at runtime在运行时在 app_data 文件夹中添加 SQL Server CE 文件
【发布时间】:2015-09-08 18:36:03
【问题描述】:

我正在使用启用多租户的 Orchard CMS。每个租户在App_data 文件夹中都有自己的SQL Server CE 数据库。我通过在应用程序运行时将租户数据从其他位置复制到App_Data 文件夹来创建新租户。

问题是如果我点击租户,.sdf 没有被加载,我得到一个错误

您正在查看的页面不存在

如果我重新启动 IIS,它就会开始工作。我的猜测是,如果我们在应用程序运行时在app_data 文件夹中添加任何内容,则这些数据不会加载到w3wp 进程中。这个问题有解决办法吗?

【问题讨论】:

  • 嗯,它说页面不存在。如果程序没有找到 sdf,那么你应该得到一个 SqlCE 错误或文件未找到错误。似乎错误在其他地方。
  • 但是如果我重新启动 IIS,一切都会开始工作,这就是为什么我假设它与 App_data 文件夹内容在应用程序运行时未刷新有关。
  • 嗯。我仍然认为问题出在其他地方。在访问之前尝试对文件执行 File.Exists(path) 以确定。
  • 如果是权限问题,看一下:stackoverflow.com/questions/18077122/…

标签: c# asp.net-mvc sql-server-ce orchardcms


【解决方案1】:

我想首先说这听起来有点像一种有趣的做事方式。此外,SQL CE 对于生产来说并不是那么好。

无论如何,我也遇到了一些关于租户创建的问题。检查包含所有租户列表的 cache.dat,可能需要刷新它。我还必须刷新租户才能工作:

// refresh tenant because otherwise it stays in setup mode
var tenant = _tenantService.GetTenants().FirstOrDefault(ss => ss.Name == name);
if (tenant == null) return HttpNotFound();
tenant.State = TenantState.Disabled;
_tenantService.UpdateTenant(tenant);

var tenant2 = _tenantService.GetTenants().FirstOrDefault(ss => ss.Name == name);
if (tenant2 == null) return HttpNotFound();
tenant2.State = TenantState.Running;
_tenantService.UpdateTenant(tenant2);

虽然看起来很迟钝,但它解决了我的问题。

我仍然建议使用 Orchard 的 API 构建租户。祝你好运!

【讨论】:

    猜你喜欢
    • 2010-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 2014-12-25
    • 2010-09-08
    相关资源
    最近更新 更多