NHibernate在遗留数据库如何告诉NHibernate哪个是父表

时间:2010-08-11 09:07:19

标签: c# fluent-nhibernate nhibernate-mapping

我在遗留数据库中有两个表...

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

正如您所看到的,添加了一个自动递增的int id,但是使用旧的字符串主键连接子表(事实上,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");
}

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

由于

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如果你想在Fluent NHibernate中进行这种映射,那么这里有一篇很好的文章:

http://wiki.fluentnhibernate.org/Fluent_mapping