【问题标题】:NHibernate On Legacy Database How To Tell NHibernate Which Is The Parent TableNHibernate On Legacy Database 如何告诉 NHibernate 哪个是父表
【发布时间】:2010-08-17 20:17:51
【问题描述】:

我在旧数据库中有两个表...

tblParentTable (int id, string specialIdentifier, ...)
tblChildTable (int id, string specialIdentifier, ...)

可以看到,添加了一个自增的int id,但是子表是用旧的字符串主键join的(其实specialIdentifier就是tblParentTable的主键,tblChildTable的主外键)。

所以我创建了域对象和 Fluent NHibernate 映射,但由于这种奇怪的架构,NHibernate 认为它需要先保存 tblChildTable 记录,然后再保存 tblParentTable - 这会导致外键约束错误。

如何向 NHibernate 提示 tblParentTable 是父级并且需要先保存?

这是映射...

public ParentMap()
{
    Table("tblParentTable");
    Id(x => x.Id).Column("id");
    Map(x => x.SpecialIdentifier);
    References(x => x.Child).Column("specialIdentifier");
}

public ChildMap()
{
    Table("tblChildTable");
    Id(x => x.Id).Column("id");
    Map(x => x.SpecialIdentifier);
    References(x => x.Child).Column("specialIdentifier");
}

如果您认为我遗漏了一些重要的信息,请随时询问更多信息。

谢谢

【问题讨论】:

    标签: c# fluent-nhibernate nhibernate-mapping


    【解决方案1】:

    我不会用流利的;相反,我通过手动创建 xml 映射文件来创建我的映射。 我相信关联上的“反向”属性允许您指定关联的“所有者”(父级)。由于我不使用fluent,我不知道如何在你的映射中指定,所以我不能给你一个例子。

    另外,在 Xml 映射中,我会使用“property-ref”属性来指示“specialIdentifier”是关系使用的列。

    【讨论】:

      【解决方案2】:

      如果您希望在 Fluent NHibernate 中进行这种映射,这里有一篇很好的文章:

      http://wiki.fluentnhibernate.org/Fluent_mapping

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-29
        • 1970-01-01
        相关资源
        最近更新 更多