NHibernate遗留数据库映射不可能?

时间:2010-03-15 13:56:29

标签: nhibernate foreign-key-relationship legacy-database

我希望有人可以帮助我映射遗留数据库。该 我在这里描述的问题一直困扰着其他人,但我无法做到 在网络上找到一个真正好的解决方案。

免责声明:这是一个遗留数据库。我无法控制复合材料 键。无论你多告诉我他们,他们都会吮吸并且无法改变 吸。我也不能添加代理键。请不要建议其中任何一个,因为它们不是选项。

我有2个表,都有复合键。一个关键之一 table用作从另一个获取集合的键的一部分 表。简而言之,表之间的键不完全匹配。 ClassB用于我想避免添加属性的任何地方 如果可能的话,为了这个映射。

public class ClassA
{
    //[PK]
    public string SsoUid;

    //[PK]
    public string PolicyNumber;

    public IList<ClassB> Others;

    //more properties....

}

public class ClassB
{
    //[PK]
    public string PolicyNumber;

    //[PK]
    public string PolicyDateTime;

    //more properties
}

我想获得ClassA的实例并获取匹配的所有ClassB行 保单号码。我想尝试一对一的东西, 但我意识到这在技术上可能是我的多对多 只是视为一对多。

我尝试过使用关联类,但是没有达到足够的目标 如果有效。我是这些更复杂的映射的新手,我正在寻找 咨询。我几乎可以接受任何想法。

谢谢, 科里

2 个答案:

答案 0 :(得分:1)

处理映射旧数据库模式的最简单方法是将代理生成的主键(即SQL Server中的标识)添加到每个数据库表,并将现有的复合主键更改为唯一约束。这允许您保留现有的外键并使NHibernate映射变得容易。

如果那是不可能的,那么你可以在映射中使用property-ref来实现这一点。

编辑:您可以随时回归贫血领域模型。也就是说,映射每个类但排除关系。您可以使用一种数据访问方法按键获取ClassA,使用一种方法通过PolicyNumber获取ClassB的集合。

答案 1 :(得分:0)

我最终能够让DB团队承认在我正在处理的表格中添加一些代理键。 This is the document I used to plead my case