0

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

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

我有 2 个表,都带有复合键。一个表中的一个键用作从另一个表中获取集合的键的一部分。简而言之,表之间的键不完全匹配。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 的实例并获取与 PolicyNumber 匹配的所有 ClassB 行。我试图让一对多的事情发生,但我意识到这在技术上可能是一个多对多,我只是将其视为一对多。

我尝试过使用关联类,但还不够远,无法查看它是否有效。我对这些更复杂的映射不熟悉,正在寻求建议。我对几乎任何想法都持开放态度。

谢谢,科里

4

2 回答 2

1

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

如果这不可能,那么您可以在映射中使用 property-ref 来完成此操作。

编辑:您总是可以退回到贫血的域模型。也就是说,映射每个类但排除关系。您将有一种数据访问方法通过密钥获取 ClassA,另一种数据访问方法通过 PolicyNumber 获取 ClassB 的集合。

于 2010-03-15T14:09:11.017 回答
0

我最终能够让数据库团队同意向我正在处理的表添加一些代理键。 这是我用来为我的案子辩护的文件

于 2011-03-23T12:16:07.857 回答