代码之家  ›  专栏  ›  技术社区  ›  Corey Coogan

不可能实现NHibernate旧数据库映射?

  •  0
  • Corey Coogan  · 技术社区  · 16 年前

    我希望有人能帮助我映射一个遗留数据库。这个 我在这里描述的问题困扰了其他人,但我不能 在网上找到一个真正好的解决方案。

    免责声明:这是一个遗留数据库。我无法控制复合材料 钥匙。不管你告诉我多少,他们都很烂,不能改变。 糟透了。我也不能添加代理键。请不要提出任何建议,因为它们不是选项。

    我有两张桌子,都有复合键。其中一把钥匙 表用作键的一部分以从另一个获取集合 表。简言之,两个表的键不完全匹配。 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 回复  |  直到 14 年前
        1
  •  1
  •   Jamie Ide    16 年前

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

    如果这是不可能的,那么您可以在映射中使用属性引用来实现这一点。

    编辑:你可以回到贫血领域模型。也就是说,映射每个类,但不包括关系。您将拥有一个按键获取ClassA的数据访问方法,以及一个按policyNumber获取ClassB集合的方法。

        2
  •  0
  •   Corey Coogan    15 年前

    我最终让数据库团队承认在我处理的表中添加了一些代理键。 This is the document I used to plead my case .