我希望有人可以帮助我映射遗留数据库。该 我在这里描述的问题一直困扰着其他人,但我无法做到 在网络上找到一个真正好的解决方案。
免责声明:这是一个遗留数据库。我无法控制复合材料 键。无论你多告诉我他们,他们都会吮吸并且无法改变 吸。我也不能添加代理键。请不要建议其中任何一个,因为它们不是选项。
我有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行 保单号码。我想尝试一对一的东西, 但我意识到这在技术上可能是我的多对多 只是视为一对多。
我尝试过使用关联类,但是没有达到足够的目标 如果有效。我是这些更复杂的映射的新手,我正在寻找 咨询。我几乎可以接受任何想法。
谢谢, 科里
答案 0 :(得分:1)
处理映射旧数据库模式的最简单方法是将代理生成的主键(即SQL Server中的标识)添加到每个数据库表,并将现有的复合主键更改为唯一约束。这允许您保留现有的外键并使NHibernate映射变得容易。
如果那是不可能的,那么你可以在映射中使用property-ref来实现这一点。
编辑:您可以随时回归贫血领域模型。也就是说,映射每个类但排除关系。您可以使用一种数据访问方法按键获取ClassA,使用一种方法通过PolicyNumber获取ClassB的集合。
答案 1 :(得分:0)
我最终能够让DB团队承认在我正在处理的表格中添加一些代理键。 This is the document I used to plead my case