如何覆盖记录表命名以访问Orchard CMS中的现有数据

时间:2011-08-11 13:03:41

标签: asp.net asp.net-mvc nhibernate fluent-nhibernate orchardcms

我需要从预先存在的表中访问数据。我已经开始创建一个模块来显示数据等。但是,Orchard使用'Table_Prefix'和'Module Name'为表命令添加前缀。

有没有办法可以指定哪个表绑定模型,以便我可以使用现有的IRepository

我正试图避免修改核心代码,或者实现我自己的IRepository(我感觉这就是我将要做的事情。)

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以通过三种方式更改核心代码来创建自定义表命名约定(以使其适合您当前的命名):

  1. 记录名称映射是在BuildRecord方法中创建的 CompositionStrategy课程 ( Orchard.Framework / Environment / ShellBuilders / CompositionStrategy ),所以你可以在这里修改代码。
  2. 通过更改Apply 类的Orchard.Data.Conventions.RecordTableNameConvention方法。这是记录表名称映射(内置于第1点)被推送到NHibernate的地方。
  3. 创建您自己的FluentNHibernate.Conventions.IClassConvention 实施(类似于上面提到的RecordTableNameConvention,并替换AutoMapOrchard.Data.Providers.AbstractDataServicesProvider使用的默认实现CreatePersistenceModel(...)方法。
  4. 您也可以创建自己的IDataServicesProvider实现,但如果您只需要更改表命名约定,那肯定会有点过分。

答案 1 :(得分:0)

我正在修改CompositionStrategy并发现你必须修改以下

<强> 1。 SetupService.cs(Modules \ Orchard.Setup \ Services):

在Setup方法中硬编码的表是 &#34; Orchard_Framework_DataMigrationRecord&#34;和 &#34; Settings_ShellDescriptorRecord&#34;

<强> 2。 InfosetController.cs(Modules \ Upgrade \ Controllers):

这个类中的多个表都是硬编码的,需要更新。

第3。 DataMigrationManager.cs(Data \ Migration):

将SchemaBuilder参数替换为构造函数。