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

NHibernate遗留数据库映射不可能?,nhibernate,foreign-key-relationship,legacy-database,Nhibernate,Foreign Key Relationship,Legacy Database,我希望有人能帮我映射一个遗留数据库。这个 我在这里描述的问题困扰着其他人,但我无法解决 在网上找到一个真正好的解决方案 免责声明:这是一个遗留数据库。我无法控制合成材料 钥匙。他们很烂,不管你怎么告诉我他们都无法改变 吮吸我也不能添加代理密钥。请不要建议这两个选项中的任何一个,因为它们都不是选项 我有两个表,都有复合键。一把钥匙从一个 表用作键的一部分,以从另一个键获取集合 桌子简言之,表之间的键不完全匹配。 ClassB在我希望避免为其添加属性的任何地方都使用 如果可能的话,为了这个映射 pu

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

免责声明:这是一个遗留数据库。我无法控制合成材料 钥匙。他们很烂,不管你怎么告诉我他们都无法改变 吮吸我也不能添加代理密钥。请不要建议这两个选项中的任何一个,因为它们都不是选项

我有两个表,都有复合键。一把钥匙从一个 表用作键的一部分,以从另一个键获取集合 桌子简言之,表之间的键不完全匹配。 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
{
//[主键]
公共字符串SsoUid;
//[主键]
公共字符串策略号;
公共部门和其他部门;
//更多属性。。。。
}
公共B类
{
//[主键]
公共字符串策略号;
//[主键]
公共字符串PolicyDateTime;
//更多属性
}
我想得到ClassA的一个实例,并得到所有匹配的ClassB行 保单号码。我正试图让一对多的关系发展起来, 但我意识到,从技术上讲,我可能是一个多对多的人 只是一对多的对待

我尝试过使用关联类,但距离不够远,无法看到 如果有效的话。我不熟悉这些更复杂的映射,正在寻找 征求意见。我对任何想法都持开放态度

谢谢,
Corey

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

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


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

我最终能够让DB团队同意向我正在处理的表中添加一些代理键

无论我在关于复合键的帖子上怎么努力,我都无法让人们停止建议我更改DB。我意识到我没有说我不能添加密钥,这是一个疏忽,但我不能更改数据库。我打那场仗已经很久了。免责声明:这是一个遗留数据库。我无法控制复合键。他们很烂,无论你告诉我他们很烂都无法改变。我也不能添加代理键。我看到这个“我对任何想法都持开放态度”,但错过了“我也不能添加代理键”。我还有一个想法,我将添加一个编辑。实际上,我在你的评论之后添加了关于代理键的部分。我知道我漏掉了那部分。谢谢你的建议。