通过 NHibernate 代码映射将 GUID 属性作为外键映射到其他实体

Posted

技术标签:

【中文标题】通过 NHibernate 代码映射将 GUID 属性作为外键映射到其他实体【英文标题】:Mapping a GUID property as Foreign Key to other entity by NHibernate mapping-by-code 【发布时间】:2014-12-07 23:31:21 【问题描述】:

在 NHibernate 中使用按代码映射/符合标准的方法时,如何创建类映射以便将 Person.CountryId 创建为我的 Country 实体的外键?

在加载 Person 实体时,我确实想直接在 person 实体中使用 Country 实体(因为它们是不同的聚合根)但仅通过 ID 引用它并且仍然具有 FK 关系在数据库中定义。

public class Person : Entity, IEntity

    public Guid CountryId  get; protected set; 


public class Country : Entity, IEntity

    public string Name  get; protected set; 

【问题讨论】:

【参考方案1】:

如果一个聚合根有对另一个聚合根的引用,那很好。这个想法是不允许您引用其他聚合的部分。

你想做的事情并不容易。有人需要知道将哪个 Guid 放入 CountryId 列。如果您的应用程序无法回答这个问题,那么没有人可以。

您可能会尝试创建一个包含国家和人之间映射的类:

public class CountryToPersonMapping

    public Guid Find(Person entity)
    
    

    public void AddMapping(Person person, Country country)
    
    

然后找到一种方法将此类的实例传递给 NHibernate 中的自定义类型以设置正确的列。可能使用服务定位器。

【讨论】:

谢谢!在这种特殊情况下,我绑定到现有模型,因此我试图通过映射而不是在 NHibernate 的映射文件中使用 来解决这个问题(我理解这是一种解决方案)。

以上是关于通过 NHibernate 代码映射将 GUID 属性作为外键映射到其他实体的主要内容,如果未能解决你的问题,请参考以下文章

如何通过代码将 Id 映射到 NHibernate 映射中的私有支持字段?

NHibernate 通过代码 ManyToOne 与 CompositeIdentity 进行映射

通过代码进行 Nhibernate 一对一映射

Nhibernate子类映射问题

NHibernate 将 1 个对象映射到 2 个表

如何将不区分大小写的字典映射到 NHibernate。?