我正在写一个自定义模块,它使用注入的IRepository从Orchard DB直接检索和推送数据。Orchard CMS - 迁移后不更新的新属性
这工作正常,直到我需要更新内容部分。我在我的迁移类中添加了一个更新,并且更新通过(使用默认值更新的数据库模式),但是我无法通过IRepository更新任何新值。我必须下载到NHibernate.ISession来刷新更改。
这一切都适用于新创建的食谱,只有当我改变一部分。下面是关键代码片段:
public class TranslationsPartRecord : ContentPartRecord
{
internal const string DefaultProductName = "Product";
public TranslationsPartRecord()
{
ProductName = DefaultProductName;
}
public virtual string ProductName { get; set; }
}
public class TranslationsPart : ContentPart<TranslationsPartRecord>
{
public string ProductName
{
get { return Record.ProductName; }
set { Record.ProductName = value; }
}
}
public class TranslationsHandler : ContentHandler
{
public TranslationsHandler(IRepository<TranslationsPartRecord> repository)
{
Filters.Add(StorageFilter.For(repository));
}
}
public class Migrations : DataMigrationImpl
{
public int Create()
{
SchemaBuilder.CreateTable("TranslationsPartRecord", table => table
.Column<int>("Id", column => column.PrimaryKey().Identity())
.Column("ProductName", DbType.String, column => column.NotNull().WithDefault(TranslationsPartRecord.DefaultProductName))
);
return 1;
}
public int UpdateFrom1()
{
SchemaBuilder.AlterTable("TranslationsPartRecord", table => table.AddColumn("ProductDescription", DbType.String, column => column.NotNull().WithDefault(TranslationsPartRecord.DefaultProductDescription)));
return 2;
}
}
当我在这个例子中添加第二个属性“产品描述”中,更新运行列之后出现在DB但直到我重新果园配方我不能更新它们( Blat App_Data并重新开始)。
这里就是我正在尝试更新:
// ctor
public AdminController(IRepository<TranslationsPartRecord> translationsRepository)
{
_translationsRepository = translationsRepository;
}
[HttpPost]
public ActionResult Translations(TranslationsViewModel translationsViewModel)
{
var translations = _translationsRepository.Table.SingleOrDefault();
translations.ProductName = translationsViewModel.ProductName;
translations.ProductDescription = translationsViewModel.ProductDescription;
_translationsRepository.Update(translations);
_translationsRepository.Flush();
}
,这里是NHibernate的 “修复”:
这似乎有点kludgey ...
干杯。
PS我更多的测试后,我仍然运行果园1.3.9
PPS,NHibernate的补丁现在已经不再工作,所以也许我的初步调查结果是一个红鲱鱼。好像NHibernate在更新/检索时完全忽略了内容部分的新属性 - 好像对象定义缓存在某处...
感谢那个信息,没有意识到映射被持续在这里。删除这个文件,然后禁用/启用模块做了窍门,虽然不相信这是我正在寻找的答案:)我只是想知道如果我这样做是否绕过Orchard进程? – 2012-03-16 09:45:57
我发现我遇到了同样的问题,并且你的解决方案能够工作,但就像@MikeSimmons一样,我发现这种方法是一种奇怪的方法来实现这一点。这真的是最好的方法吗?仅供参考 - 我正在使用Orchard 1.6。 – bigmac 2012-11-14 03:02:00
我正在运行果园1。10,并在我的'ContentPart'中添加了一个属性,发现我也必须删除这个映射文件。这是一个担心,因为我想释放我的模块,这会使升级变得困难。 – hsimah 2016-04-27 09:00:02