如何在Orchard cms中创建1:1的关系

时间:2017-02-23 20:45:14

标签: c# sql-server nhibernate orchardcms nhibernate-mapping

我正在尝试在果园中构建自定义模块,并且需要/希望有一些1:1的表关系。我已经阅读了Orchard 1-n and n-n doc,在创建一个继承了ISessionConfigurationEvents的Mappings类时,它似乎只在最后谈到1-1

<Target Name="EnforcePostCompilationRules" AfterTargets="AfterBuild">
     <EnforceMethodParameterDefaultValue />
</Target>

我不明白如何让Nhibernate链接表格。我是否需要构建它们,就像它们是1-n然后将上面的代码放在一起使得Nhibernate将表视为1比1,但是当使用代码时,我仍然必须将关系视为1的列表?

我有一个产品表,其中包含由两个不同部门管理的字段,即营销和采购。我想要一个ProductRecord表,它与ProductMarketingInfoRecord有1:1的关系,与ProductPurchasingInfoRecord有1:1的关系。我想在明确的单独表中保留它的一个原因是我想使用rowversion字段(SQL Server中的时间戳),我认为我通过在迁移类中编写自定义sql命令来工作。如果有更好的方法,请告诉我

所以在我的模型文件夹中我有:

defaultModel.Override<ClassA>(x => x.HasOne(y => y.ClassB));

Migrations.cs文件

public class ItemRecord {
    public virtual Guid Id { get; set; }
    public virtual string ItemNumber { get; set; }
    // more fields ...
    public virtual ItemPurchaingInfoRecord ItemPurchasingInfoRecord { get; set; }
    public virtual ItemPurchaingInfoRecord ItemMarketingInfoRecord { get; set; }
}

public class ItemPurchasingInfoRecord {
    public virtual Guid Id { get; set; } //should match ItemRecord.Id
    // more purchasing fields ....
    public virtual byte[] RowVersion { get; set; }
    public virtual ItemRecord ItemRecord { get; set; }
}

public class ItemMarketingInfoRecord {
     public virtual Guid Id { get; set; } //should match ItemRecord.Id
    // more marketing fields ....
    public virtual byte[] RowVersion { get; set; }
    public virtual ItemRecord ItemRecord { get; set; }
}

启用模块并检查数据库后,表上没有外键关系。我是否需要以手动添加rowversion / timestamp字段的方式手动创建这些外键?如果我这样做,Nhibernate会认识到这种关系吗?

0 个答案:

没有答案